728x90
# 문자열 함수 헤더
#include <string.h>
함수 | 설명 |
strcpy ( 대상문자열, 소스문자열 ) | 소스 문자열을 대상 문자열에 복사합니다. |
strncpy (대상, 소스, 길이 ) | 소스 문자열의 일부분을 대상 문자열에 복사합니다. |
strcat (대상, 소스 ) | 소스 문자열을 대상 문자열의 뒤에 붙입니다. |
strncat (대상, 소스, 길이 ) | 소스 문자열의 길이만큼 대상 문자열 뒤에 붙입니다. |
strcmp ( 문자열1, 문자열2 ) | 두 문자열의 크기를 비교합니다. |
strncmp (문자열1, 문자열2, 길이 ) | 두 문자열의 길이까지의 크기를 비교합니다. |
stricmp ( 문자열1, 문자열2 ) | 대소문자 구분하지 않고 두 문자열의 크기를 비교합니다. |
strnicmp (문자열1, 문자열2, 길이 ) | 대소문자 구분하지 않고 두 문자열의 길이까지의 크기를 비교합니다. |
strchr ( 대상, 소스문자 ) | 문자열에서 문자를 발견하면 그 주소를 리턴합니다. 없으면 null 리턴. |
strrchr (대상, 소스문자 ) | strchr()를 뒤에서 앞쪽으로 검색합니다. |
strstr ( 대상문자열, 소스문자열 ) | 전체문자열에서 일부문자열이 있으면 그 시작주소를 리턴합니다. |
strpbrk (대상, 소스) | 문자열에서 문자를 발견하면 그 주소를 리턴합니다. 소스문자열의 개별 문자들을 모두 인식합니다. |
strtok (대상, 소스) | 문자열에서 소스를 만나면 그 전까지의 문자열을 리턴하고, 현재위치를 null로 만든 후 기억합니다. strtok(NULL, 소스) 로 기억한 위치부터 재시작할 수 있습니다. |
strset ( 대상, 소스문자 ) | 문자열을 소스문자로 채웁니다. |
strnset ( 대상, 소스문자, 길이 ) | 문자열에 소스문자를 길이만큼 채웁니다. |
strlwr ( 문자열 ) | 문자열을 모두 소문자로 변환합니다. |
strupr ( 문자열 ) | 문자열을 모두 대문자로 변환합니다. |
strrev ( 문자열 ) | 문자열의 배열을 역순으로 바꿉니다. |
# strcpy, strncpy
char str1[10] = "aaaaaa";
char str2[10];
char str3[10] = "bbbbbb";
char str4[10] = "123456";
strcpy(str2, str1); // str1을 str2에 복사한다.
printf("%s\n", str2);
strncpy(str3, str2, 3); // str2[2]까지 str3에 복사한다.
printf("%s\n", str3);
strncpy(str3+1, str4+2, 4); // str4[2]부터 4글자를 str3[1]에 복사한다.
printf("%s\n", str3);
aaaaaa
aaabbb
a3456b
# strcat, strncat
char str1[10] = "서울";
char str2[10] = "특별시";
strcat(str1, str2); // str2를 str1 뒤에 붙인다.
printf("%s\n", str1);
strncat(str1, "중구신당동", 4); // 두번째 매개변수 문자열의 4바이트만큼을 str1 뒤에 붙인다.
printf("%s\n", str1);
서울특별시
서울특별시중구
한글은 한 글자에 2바이트씩 차지하므로 세번째 매개변수를 4로 넣으면 두 글자를 가져옵니다.
3이나 5와 같이 홀수로 넣으면 뒤에 깨진 문자가 붙게됩니다.
* 빈 문자열에 strcat()을 사용하여 문자열을 여러번 붙여넣고 싶을 때
빈 문자열에 가장 처음 문자열을 붙여넣을 때 strcat()을 사용하면 '\0' 문자가 없어 문자열 에러가 발생합니다.
따라서 가장 처음에는 strcpy()를 사용하여 빈 문자열을 '\0'이 있는 문자열로 만들어준 다음
그 다음부터 strcat()를 여러번 사용하면 됩니다.
확실치는 않지만 strcat()는 기존 문자열의 마지막 문자와 '\0' 사이에 공간을 확보하여 문자열을 끼워 넣느라,
새롭게 '\0' 문자를 붙이진 않는 것 같습니다.
# strcmp, strncmp, stricmp, strnicmp
char str1[10] = "a";
char str2[10] = "a";
printf("%d\n", strcmp(str1, str2)); // 두 문자열의 크기가 같아서 0을 리턴.
printf("%d\n", strcmp("a", "b")); // 아스키코드 a=65, b=66 으로 b가 더 큽니다.
printf("%d\n\n", strcmp("c", "b")); // 아스키코드 c=67, b=66 으로 c가 더 큽니다.
char str3[10] = "홍길동";
char str4[10] = "홍두깨";
printf("%d\n", strncmp(str3, str4, 2)); // 한글 한 글자까지 비교해서 같습니다.
printf("%d\n\n", strncmp(str3, str4, 4)); // 한글 두 글자까지 비교해서 다릅니다.
if(stricmp("DOG", "dog")==0) // 대/소문자를 구분하지않고 비교해줍니다.
printf("같습니다.\n");
else printf("다릅니다") ;
0
-1
1
0
-1
같습니다.
# strchr, strrchr
char str[10] = "notebook";
printf("%d\n", strchr(str, 'o')); // 앞에서부터 o를 찾아 str[1]의 주소를 리턴합니다.
printf("%d\n", strchr(str, 'x')); // x가 없기 때문에 0 값을 리턴합니다.
printf("%d\n", strrchr(str, 'o')); // 뒤에서부터 o를 찾아 str[6]의 주소를 리턴합니다.
int count =0;
char *ptr;
for(ptr=str;;){ // str[0]을 가리킨체로 시작
// 현재 포인터가 가리키는 주소에서부터 o를 찾습니다.
// 여기서 처음에는 첫번째 o가 있는 str[1]을 가리킵니다.
ptr = strchr(ptr, 'o');
if(ptr==NULL) break; // 더이상 o를 찾지 못하고 NULL값을 리턴하면 멈춥니다.
count++;
// 포인터가 다음 주소를 가리키도록 +1 해줍니다.
// 위에서 str[1]이었으므로 str[2]를 가리킵니다.
ptr++;
}
printf("문자 o가 %d개 있습니다.\n", count);
6487553 ( 실제 출력되는 주소를 다릅니다. )
0
6487558 (실제 출력되는 주소를 다릅니다. )
문자 o가 3개 있습니다.
# strstr
char str[100] = "서울특별시 중구 신당동";
// str문자열에 "신당" 문자열이 있으면 그 시작 위치의 주소를 리턴합니다.
// 없으면 0, NULL값을 리턴합니다.
if(strstr(str,"신당")!=0)
printf("신당동 주소입니다.\n");
else
printf("신당동 주소가 아닙니다.\n") ;
신당동 주소입니다.
# strpbrk
char str[100] = "이름: 홍길동, 나이: 24";
// 문자열 str에서 0 ~ 9 중 가장 먼저 발겨되는 문자의 위치를 리턴합니다.
// 여기서는 str[20]의 주소를 리턴합니다.
printf("%d\n", strpbrk(str, "0123456789"));
// 발견되지 않으면 0, NULL값을 리턴합니다.
printf("%d\n", strpbrk(str, "abcdefghijklmnopqrstuvwxyz"));
6487579
0
# strtok
char str[100] = "서울시 중구 신당동 신당아파트 888동 333호";
char *ptr;
// 첫 번째 " " 만나면 이전까지의 문자열을 ptr에게 리턴하고
// 현재위치를 NULL처리한 후 기억합니다. (여기에서는 str[6])
ptr=strtok(str, " ");
while(ptr!=NULL){
puts(ptr); // ptr이 받은 주소값부터 NULL처리된 위치까지의 문자열을 출력합니다.
ptr = strtok(NULL, " ");// 기억된 NULL위치부터 다음 " "위치까지 진행합니다.
}
서울시
중구
신당동
신당아파트
888동
333호
# strset, strnset, strlwr, strupr, strrev
char str[7]="aaaa";
strset(str, 'b'); // 문자열을 b로 채웁니다.
printf("%s\n", str);
strnset(str, 'c', 2); // str[0] ~ [1] 까지 c로 채웁니다.
printf("%s\n", str);
strupr(str); // 문자열을 모두 대문자로 변환합니다.
printf("%s\n", str);
strlwr(str); // 문자열을 모두 소문자로 변환합니다.
printf("%s\n", str);
char str2[11] = "abcdefghij";
strrev(str2); // 문자열을 현재의 역순으로 재정렬합니다.
printf("%s\n", str2);
char str3[11] = "가나다라마";
strrev(str3); // 1바이트단위로 계산하기 때문에 한글은 적용되지 않습니다.
printf("%s\n", str3);
bbbb
ccbb
CCBB
ccbb
jihgfedcba
(깨진문자열이 출력됩니다)
728x90
'Lang > C' 카테고리의 다른 글
[C] 포인터 # 함수 포인터의 이해 (1) | 2022.12.06 |
---|---|
[C] 문자열 서식 # 이스케이프 시퀀스 (0) | 2022.12.06 |
[C] C와 C++ Integer의 MIN, MAX (0) | 2022.11.30 |
[C] C 문법 공부 #2 입력 scanf(), gets(), getch(), kbhit() (0) | 2022.11.22 |
[C] C 문법 공부 #1 출력 printf() (1) | 2022.11.22 |