C에서 문자열 자르기
이 기사에서는 C에서 문자열을 자르는 방법에 대한 여러 방법을 소개합니다.
포인터 산술과 함께 사용자 지정 함수를 사용하여 문자열 자르기
C의 문자열은 null 바이트-\0
로 끝나는 문자 배열 일 뿐이므로 현재 포인터를 주어진 자리 수만큼 문자열의 시작 부분으로 이동하고 새 포인터 값을 반환하는 사용자 지정 함수를 구현할 수 있습니다.
하지만 두 가지 문제가 있습니다. 첫 번째는 주어진 문자열을 왼쪽 또는 오른쪽에서 자르는 옵션이 필요하고 두 번째는 끝을 표시하기 위해 널 바이트를 삽입해야하므로 포인터를 문자열의 오른쪽에서 이동하는 것으로 충분하지 않다는 것입니다. 따라서 우리는 문자열에서 잘라 내기 위해 문자열과 여러 문자를 취하는truncString
함수를 정의합니다. 숫자는 음수 일 수 있으며, 주어진문자
수를 제거 할면을 나타냅니다. 다음으로strlen
함수를 사용하여 문자열 길이를 검색합니다. 이는 사용자가 유효한 문자열을 전달해야 함을 의미합니다. 그런 다음 길이를 잘라낼 문자 수와 비교 한 다음 포인터 조작을 수행합니다.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *truncString(char *str, int pos) {
size_t len = strlen(str);
if (len > abs(pos)) {
if (pos > 0)
str = str + pos;
else
str[len + pos] = 0;
}
return str;
}
int main(void) {
char *str1 = "the string to be truncated";
printf("%s\n", str1);
printf("%s \n", truncString(strdupa(str1), 4));
printf("%s \n", truncString(strdupa(str1), -4));
exit(EXIT_SUCCESS);
}
출력:
the string to be truncated
string to be truncated
the string to be trunc
문자열의 길이와 전달 된 숫자를 빼서 계산 된 문자 위치에0
값을 할당합니다. 따라서 우리는 문자열의 끝을 이동하고 그 값을 인쇄하는 것은 이전 포인터로 수행 할 수 있습니다.
또는 동일한 프로토 타입으로 유사한 함수truncString2
를 구현할 수 있지만 문자열을 두 번째 인수로 전달 된 문자 수로 자릅니다. 숫자의 부호는 새 문자열을 형성 할면을 나타냅니다. 즉, 양의 정수는 왼쪽을 나타내고 음수는 그 반대를 나타냅니다.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *truncString2(char *str, int pos) {
size_t len = strlen(str);
if (len > abs(pos)) {
if (pos > 0)
str[pos] = 0;
else
str = &str[len] + pos;
} else {
return (char *)NULL;
}
return str;
}
int main(void) {
char *str2 = "temporary string variable";
printf("%s\n", str2);
printf("%s \n", truncString2(strdupa(str2), 6));
printf("%s \n", truncString2(strdupa(str2), -6));
exit(EXIT_SUCCESS);
}
출력:
the string to be truncated
string to be truncated
the string to be trunc
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