int size=strlen("Hello"); //size는 5가 된다.
#include <string.h>
strlen(s) //문자열 s의 길이를 구한다.
strcpy(s1,s2) //s2를 s1에 복사한다.
strcat(s1,s2) //s2를 s1끝에 붙여넣는다.
strcmp(s1,s2) //s1과 s2를 비교한다.
strncpy(s1,s2,n) //s2의 최대 n개의 문자를 s1에 복사한다.
strncat(s1,s2,n) //s2의 최대 n개의 문자를 s1의 끝에 붙여넣는다.
strncmp(s1,s2,n) //최대 n개의 문자까지 s1과 s2를 비교한다.
strchr(s,c) //문자열 s안에서 문자 c를 찾는다.
strstr(s1,s2) //문자열 s1에서 문자열 s2를 찾는다.
char *strtok(s,delimit); //문자열 s를 delimit를 이용하여 토큰으로 분리한다.
<string.h> 헤더파일을 반드시 포함하여야 한다.
문자열 길이
int size =strlen("Hello") //size는 5가 된다.
문자열 길이를 계산하는 함수는 strlen(const char *str)이다.
문자열 복사
char dst[6];
char src[6]="Hello";
strcpy(dst,src); //src를 dst로 복사한다.
strcpy()는 src가 가리키는 문자열을 dst가 가리키는 배열로 복사한다. dst가 저장하고 있던 값은 덮어씌워져서 없어진다.
문자열의 목사는 한 문자씩 이루어지며 NULL문자 '\0'가 나올 때까지 복사를 계속하게 된다. strcpy()를 사용하면 간단하게 한 줄로 복사를 할 수 있으므로 간편한다.
만약 복사할 문자의 개수를 제한하려면 strncpy()를 사용하면 된다.
strncpy(dst,"Hello",3); //"Hel" 만 복사된다.
문자열 연결
char dst[12]="Hello";
char src[6]="World";
strcat(dst,src); //dst가 "HelloWorld"가 된다.
dst문자열 뒤에 src문자열을 연결한다. strcat()는 src를 dst의 끝에 붙이고 전체 문자열을 NULL 문자로 종료한다.
만약 dst배열에 src를 연결할 충분한 공간이 없다면 문제가 발생하는데 이때 문자의 개수를 제한하여 연결하는 함수인
strncat()를 사용하면된다.
char dst[12]="Hello";
char src[6]="World";
strncat(dst,src,3); //dst가 "HelloWor"가 된다.
문자열 비교
int result=strcmp("dog","dog"); //문자열이 같으므로 0이 반환된다.
strcmp()는 사전적인 순서로 두 개의 문자열을 비교한다.
strcmp()는 주로 2개의 문자열이 같은지를 검사하는데 사용된다. 이때 문자열이 같으면 0을 반환한다.
- s1이 s2보다 앞에 있는경우 ---> 음수 반환
- s1==s2 --->0 반환
- s1 이 s2보다 뒤에 있다. ---> 양수 반환
예를들어 strcmp("strcmp","strcpy")를 호출했을때, 5번째 문자 m이 p보다 아스키코드값이 작으므로(사전적으로 앞에 있음) 음수(-1)을 반환한다.
마찬가지로 최대 n번째 문자까지만 비교하고 싶으면 strncmp()를 사용하면 된다.
문자 검색
char *p=strchr("dog",'g'); //g문자의 주소를 반환한다.
strchr()은 문자열 str의 첫번째 문자부터 차례대로 검색해나가다가 문자 c를 찾으면 그 위치의 주소를 반환한다.
문자를 찾지 못하면 NULL값을 반환한다.
char s[]="Language";
char c='g';
char *p;
int loc;
p=strchr(s,c) //문자열 s에서 c, 즉 g를 검색한다.
g는 문자열 "Language"의 네번째에서 처음으로 나타난다.
따라서 strchr()은 처음나타나는 'g'의 위치를 반환하므로 &s[3]이 strchr() 함수의 반환값으로 반환된다.
strchr() 과 비슷한 함수로 strrchr()이 있다. 이 함수는 strchr()과 검색하는 방향이 반대이다. 즉 마지막 문자에서 시작하여 문자열의 시작 부분으로 원하는 문자를 검색한다.
문자열 검색
주어진 문자열 안에 특정한 문자열이 있는지를 검색하려면 strstr()를 사용한다.
char *p=strstr("dog aand cat","cat");
strstr() 함수는 문자열 s안에서 부분 문자열 (substring) sub를 검색하는 함수이다. 만약 부분 문자열이 발견되면 그 위치의 주소를 반환한다. 만약 부분 문자열을 찾지 못하면 NULL값이 반환된다.
문자열에 어떤 단어가 있는지 검사할때 자주 사용되므로 반드시 외워두자.
문자열 토큰 분리
strtok()는 문자열을 분리할 수 있다. 예를들어 "Hello World!"를 "Hello" 와 "World!"로 분리할 수 있다.
strtok()에서는 단어를 분리하는 분리자를 사용자가 마음대로 지정할 수 있다.
char *p=strstr("Hello World!"," "); //분리자 : 스페이스문자
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main( void )
{
char s[] = "Man is immortal, because he has a soul";
char seps[] = " ,\t\n"; //분리자 : 스페이스문자,쉼표,탭문자,줄바꿈문자
char *token;
token = strtok( s, seps ); //문자열에서 첫번째 토큰을 얻는다.
while( token != NULL ) { //문자열 s에 토큰이 있는 동안 반복한다.
printf( "토큰: %s\n", token );
token = strtok( NULL, seps ); //다음 토큰을 얻으려면 NULL을 인수로 준다.
}
return 0;
}
분리자로 배열을 만들어서 사용할 수 있고, 여러개의 문자를 동시에 분리자로 사용하려고 " ,\t\n"을 적어주었다.
분리자로는 어떠한 문자도 사용될 수 있다.
strtok()는 포인터를 반환한다. 만약 계속해서 다음 단어를 읽으려면 s대신에 NULL을 넣으면 된다.
즉 나머지 토큰들은 연속적인 strtok(NULL, " ") 호출에 의해 추출된다.
##참고사항##
strtok() 함수는 s를 변경한다. 즉 단어를 하나씩 얻을때마다 단어의 끝에 NULL 문자를 추가한다.
'C' 카테고리의 다른 글
스트림과 파일 입출력 (성적 기록 및 계산기) (0) | 2024.07.03 |
---|---|
2차원 공간상에서의 평행이동 (typedef 활용) (0) | 2024.06.30 |
문자열 입출력 라이브러리 (0) | 2024.06.25 |
문자 입출력 라이브러리 (0) | 2024.06.25 |
문자열 기본 개념 및 활용 (0) | 2024.06.24 |