C에서 문자열 자르기

Jinku Hu 2023년10월12일
  1. 사용자 지정 함수를 사용하여 C에서 문자열 자르기
  2. 다른 사용자 지정 함수를 사용하여 C에서 문자열 자르기
C에서 문자열 자르기

이 기사에서는 C에서 문자열을 자르는 방법에 대한 몇 가지 방법을 설명합니다.

사용자 지정 함수를 사용하여 C에서 문자열 자르기

문자열 트리밍 함수는 표준 C 라이브러리 문자열 유틸리티의 일부가 아니거나 POSIX 호환 함수에서 제공하지 않으므로 기능을 직접 구현해야합니다. 이 예에서는 단일char포인터 인수를 취하고 잘린 문자열에 대한 포인터를 반환하는trimString이라는 함수를 구현합니다. 호출자로서 우리는 수정할 수있는 문자열을 전달해야합니다. 이 경우strdup을 사용하여str1을 복제했으며 문자열을 사용할 때free호출을 사용하여 해제해야합니다.

trimString함수는 문자열 문자를 문자 단위로 반복하도록 구현되며 주어진 문자열이 공백 인 동안 포인터를 1 씩 증가시킵니다. 간단히 말해서,이while루프는char포인터 포인트를 공백이 아닌 첫 번째 문자로 이동하여 문자열의 접 두부를 트리밍합니다. 다음으로, 값이 null과 같으면 증가 된 포인터가 검사되어 주어진 문자열에 공백이 아닌 문자가 없음을 의미합니다. 따라서 오류 사례를 나타 내기 위해 null을 반환합니다. 결과 while루프는 포인터를 문자열 끝으로 하나씩 뒤로 이동하여 문자열 끝의 공백을 제거합니다. 루프가 공백이 아닌 문자를 만나면 중지되고 다음 명령문은 그 끝에\0문자를 넣습니다.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *trimString(char *str) {
  char *end;

  while (isspace((unsigned char)*str)) str++;

  if (*str == 0) return str;

  end = str + strlen(str) - 1;
  while (end > str && isspace((unsigned char)*end)) end--;

  end[1] = '\0';

  return str;
}

int main(void) {
  const char *str1 = "  temporary string     ";

  printf("%s\n", str1);

  char *tmp = strdup(str1);
  printf("%s\n", trimString(tmp));

  free(tmp);
  exit(EXIT_SUCCESS);
}

출력:

  temporary string     
temporary string

다른 사용자 지정 함수를 사용하여 C에서 문자열 자르기

이전 트리밍 기능과 유사하게trimString2가 구현되어 문자열의 양쪽에서 공백을 제거합니다. 첫 번째while루프는 문자열 끝의 공백 수를 계산하고 두 번째 루프는 포인터를 공백이 아닌 첫 번째 문자로 이동합니다. 루프 문 끝에서lenstrndup함수에 의해 생성 된 잘린 문자열의 문자 수를 포함합니다. 메모리 누수를 방지하려면strndup함수에서 반환 된 포인터가 호출자에 의해 해제되어야합니다.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *trimString2(char *str) {
  size_t len = strlen(str);

  while (isspace(str[len - 1])) --len;
  while (*str && isspace(*str)) ++str, --len;

  return strndup(str, len);
}

int main(void) {
  char *str2 = "       temporary string  ";

  printf("%s\n", str2);

  char *s = trimString2(str2);
  printf("%s\n", s);

  free(s);
  exit(EXIT_SUCCESS);
}

출력:

     temporary string  
temporary string
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C String