3가지 함수정리
1. strcpy 함수 소개
이 함수는 문자열 전체를 복사하는
역할을 합니다.
이 함수를 쓸때 주의 할점은 바로
문자열을 다루는 함수이기 때문에
<string.h>를 꼭 포함 시켜줘야 합니다.
ex)#include<string.h>
그럼 바로 예제에 들어가봅시다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<stdio.h> #include<string.h> int main() { char num1[10] = "Hello"; char num2[10]; strcpy(num2, num1); printf("%s\n", num2); return 0; } | cs |
이렇게 입력하면
그대로 Hello가 출력 됩니다.
그럼 조금 더 심화로 가봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<stdio.h> #include<string.h> int main() { char num1[10]; char num2[10]; gets(num1); strcpy(num2, num1); printf("%s\n", num2); return 0; } | cs |
이렇게하면
Hello를 입력했을때 똑같이 Hello가
복사 되어 나옵니다.
이걸 for문으로 고치면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include<stdio.h> int main() { char go[10]; char num[10]; int a; int j; int i = 0; gets(go); for (a = 0; go[a] != '\0'; a++) { num[a] = go[a]; i++;//i의 값이 종료조건까지 커짐 } for (j = 0; j <= i; j++) { printf("%c", num[j]); } printf("\n"); return 0; } | cs |
이렇게 됩니다!!
2.strlen함수소개
이것은 문자의 길이를 측정해 주는 함수로
이것 또한 <string.h>를 포함시켜준다.
바로 예제를 들어가보자
우린 이제 까지 무언가의 길이를 측정할때 sizeof 함수를
사용 했었다. 하지만 이 함수와 strlen함수는 큰차이가 있다.
예시를 들어 보자.
1 2 3 4 5 6 7 | #include<stdio.h> int main() { char a[5] = "ace"; printf("%d\n", sizeof(a)); return 0; } | cs |
먼저 이렇게 입력하면
이렇게 뜬다.하지만 strlen을 입력하면,
1 2 3 4 5 6 7 8 9 10 | #include<stdio.h> #include<string.h> int main() { char a[5] = "ace"; printf("%u\n", strlen(a)); return 0; } | cs |
이렇게 뜬다 그이유는 sizeof는 a의 메모리의 크기를
출력하는 반면 strlen은 a의 문자열의 길이 즉
ace의 길이를 출력하기 때문이다.
(*strlen은 부호없는 10진 정수를 가르키는 %u를 쓴다.)
이것을 이용해서 예제를 만들어본다면
1 2 3 4 5 6 7 8 9 10 | #include<stdio.h> #include<string.h> int main() { char num[50]; gets(num); printf("%d", strlen(num)); return 0; } | cs |
이렇게 만들수 있다 이것을 이용하면 사용자가
입력한 문자열의 길이를 알수있다.
이것을 또 for문으로 바꾸면,
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include<stdio.h> int main() { char num[30]; int i; gets(num); for (i = 0; num[i] != '\0'; i++) { } printf("문자의 길이 = %d", i); return 0; } | cs |
이렇게 쓸수있다
3. strcmp함수 소개
이 함수는 두 문자열을 비교 할때 사용한다.
당연하듯이 <string.h>를 사용한다.
바로 예제로 들어가 보자.
우린 먼저 무언가를 비교할때 if문을 쓴다.
예를 들어
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<stdio.h> int main() { char num[10] = "yocheck"; char go[10] = "yocheck"; if (num == go) printf("둘은 아주 놀랍게도 동일하다\n"); else printf("둘은 아주 놀랍게도 다르다\n"); return 0; } | cs |
이렇게 말이다. 그래서
우리의 예상대로라면, 1번째 if문이 출력될것이다
but 이것을 실행해보면
이렇게 뜬다. 그 이유는 바로 그냥 "=="는 go와 num의
주소값을 비교하기 때문이다.
따라서 우리가 원하는 문자열을 비교하기 위해서는 바로
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include<stdio.h> #include<string.h> int main() { char num[10] = "yocheck"; char go[10] = "yocheck"; if (!strcmp(num, go)) printf("둘은 아주 놀랍게도 동일하다\n"); else printf("둘은 아주 놀랍게도 다르다\n"); return 0; } | cs |
이렇게 해야한다(strcmp함수는 문자열이 같을때 0을
출력하므로 앞에 !(not)을 붙여 줘야 한다!! 물론 다르게
하는 방법도 다양하게 존재한다)
이렇게 하면
이렇게 뜬다.
이것을 통해 예제를 만들어보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<stdio.h> #include<string.h> int main() { char num[10]; char go[10]; printf("입력"); gets(num); printf("입력"); gets(go); if (!strcmp(num, go)) printf("둘은 아주 놀랍게도 동일하다\n"); else printf("둘은 아주 놀랍게도 다르다\n"); return 0; } | cs |
사용자에게 받은 문자열이
같은지 비교해준다.(이것을 이용해 정보가 맞는지
확인 가능하다)
이것을 for문으로 구현하면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include<stdio.h> int main() { char num[30]; char go[30]; int i, j; int a = 0; int y = 0, x = 0; printf("입력"); gets(num); printf("입력"); gets(go); for (i = 0; num[i] != '\0'; i++) y++; for (j = 0; go[j] != '\0'; j++) { if (num[j] == go[j] || x == y) { x++; } } if (x == y) printf("두문자는 같습니다\n"); else printf("두문자는 다릅니다\n"); return 0; } | cs |
이렇게 된다
4. 총정리
strlen는 문자열의 길이를 측정
strcpy는 문자열을 복사
strcmp는 문자열 비교에 쓰인다!