본문 바로가기
문법관련/C

12.2 문자열 연산함수

by print_soo 2024. 6. 27.

[strcpy]

→ 문자열을 대입하는 함수

strcpy(대입돨 문자열의 베얄명, 대입할 문자열)
					    🔺             🔺
					  복사할 곳        복사할 내용  
					  
//예시

char str1[20] = "apple";
strcpy(str1, "mango");

문자열은 그 문자열의 주소이다.

즉, strcpy 인자는 주소두개를 받아서 실행하는 함수이다. 따라서 아래와 같이 두 번째 인자에 주소인 배열을 넣어서 실행시킬 수 있다.

strcpy(대입될 문자열의 베얄명, 대입할 문자열의 베얄명)
					    🔺                🔺
					  복사할 곳          복사할 내용  

//예시 

char str1[20] = "apple";
char str2[20] = "mango";
strcpy(str1, str2);

또는 포인터 변수로 문자열을 받아서 그 포인터 변수를 대입할 문자열로 넣을 수도 있다.

strcpy(대입될 문자열의 베얄명, 대입할 문자열의 포인터 변수명)
					    🔺                   🔺
					  복사할 곳             복사할 내용  

//예시 

char str1[20] = "apple";
char *ps1 = "mango";
strcpy(str1, ps1);

불가능한 예시

//불가능 예시

char *ps1 = "apple";
char *ps2 = "mango";
strcpy(ps1, ps2);

//가능한 예시

char str1[20] = "apple";
char *ps1 = str1;
char *ps2 = "mango";
strcpy(ps1, ps2);

위에 처럼 첫 번쨰 인자에는 저장할 공간(메모리)가 있어야하기 때문에 배열만 가능하다.


[strncpy]

→ 원하는 개수의 문자만을 복사하는 함수

strncpy(대입될 문자열의 베열명, 대입할 문자열, 복사할 문자수)
					    🔺             🔺
					  복사할 곳        복사할 내용  
					  
//예시

char str1[20] = "apple pie";
strncpy(str1, "mango jam", 5);

//결과
//mango pie

[strcat], [strncat]

→ 문자열을 붙이는 함수

strcat(붙여넣을 문자열의 베열명, 붙일할 문자열)
					    🔺             🔺
					  붙여넣을 곳      붙여넣을 내용  
					  
strncat(붙여넣을 문자열의 베열명, 붙일할 문자열, 복사할 문자수)
					    🔺             🔺
					  붙여넣을 곳      붙여넣을 내용  

//예시

char str[20] = "straw";

strcat(str, "berry"); //strawberry

strncat(str, "piece", 3); //strawberrypie			  


[strlen]

→ 문자열 길이를 계산하는 함수

strlen(크기를 확인할 배열명)

//예시

char str[80] = "hello";
int len = strlen(str);
printf("%d", len); //5


[strcmp], [strncmp]

→ 문자열을 사전 순서대로 비교하는 함수

strcmp(비교할 배열명1, 비교할 배열명2)

// 배열명1이 배열명2보다 사전 순서보다 나중에 나오면 1반환
// 배열명1이 배열명2보다 사전 순서보다 먼저 나오면 -1반환
// 배열명1과 배열명2가 같은 문자열이면 반환

char str1[20] = "pear";
char str2[20] = "peach";

strcmp(str1, str2); // 1

 

사전 순서대로 비교한다는건 무슨 말인가?

→알파벳 순서대로 비교하겠다는 의미이다.

pear와 peach를 비교해보자.

 

1. 첫 번째 요소 비교

[ p | e | a | r | \\0 ] -> str1
 🔺

[ p | e | a | c | h | \\0 ] -> str2
 🔺

→ 같은 아스키코드 값을 갖고 있다.

2. 두 번째 요소 비교

[ p | e | a | r | \\0 ] -> str1
     🔺

[ p | e | a | c | h | \\0 ] -> str2
     🔺

→ 같은 아스키코드 값을 갖고 있다.

3. 세 번째 요소 비교

[ p | e | a | r | \\0 ] -> str1
         🔺

[ p | e | a | c | h | \\0 ] -> str2
         🔺

→ 같은 아스키코드 값을 갖고 있다.

4. 네 번째 요소 비교

[ p | e | a | r | \\0 ] -> str1
             🔺

[ p | e | a | c | h | \\0 ] -> str2
             🔺

→ r은 아스키 코드 값이 114, c는 아스키 코드 값이 99이기 때문에 사전 순서로 str1이 str2보다 사전에 나중에 나오기에 반환 값은 1이다.

 

 

strncmp는 strcmp함수와 거의 같지만 비교할 문자 수를 세 번째 인수로 지정할 수 있다.

strncmp(비교할 배열명1, 비교할 배열명2, 비교할 문자 수)

char str1[20] = "pear";
char str2[20] = "peach";

strncmp(str1, str2, 3); //0 즉, 같다.

 

주의할 점: 비교할 두 문자열의 대소문자는 동일하게 해야한다. 

'문법관련 > C' 카테고리의 다른 글

14.1 다차원 배열  (0) 2024.08.07
13. 변수  (0) 2024.07.04
12.1 문자열과 포인터  (0) 2024.06.26
11.3 getchar(), putchar()  (0) 2024.06.26
11-2. 버퍼를 이용하는 입력 함수  (0) 2024.06.25