본문 바로가기

System Programmings/C

[C] 문자열 비교 & 검색 (strcmp(), strncmp(), strstr(), strpbrk(), strspn(), strcspn())

반응형
// 문자열 비교 /* strcmp(dest, srt) 에서 dest==srt 면 0을 반환 dest<src면 음수값 반환 dest>src면 양수값 반환 */
#include <stdio.h>
#include <string.h>

int main()
{
	char s1[]="ABCD";
	char s2[]="ABCD";
	char s3[]="abcd";
	char s4[]="abc";

	printf("%d\n", strcmp(s1, s2)); // 문자열이 같으면 0을 반환한다.
	printf("%d\n", strcmp(s1, s3)); // 대소문자 가린다. 아스키 코드상 대문자가 소문자보다 10진수로 적다.
	// 따라서 음수값 반환
	printf("%d\n", strcmp(s3, s4)); // s3가 s4보다 크다. 따라서 양수값 반환

	printf("%d\n", strncmp(s3, s4, 3)); // s3와 s4는 다르지만 strncmp함수를 이용해 3번째 까지만 비교한다.
	// 따라서 abc까지만 비교하므로 0을 반환

	return 0;
}
// 문자열 검색
strchr(char *s1, int c) : s1 문자열 중에 c와 일치하는 문자의 포인터 반환
strrchr(char *s1, int c) : 위와 같지만 마지막에 일치하는 문자의 포인터를 반환

strstr(char *s1, char *s2) : s2에 있는 문자열과 일치하는 첫 번째 s1의 문자열의 포인터를 반환
strpbrk(char *s1, char *s2) : s2에 있는는 첫번째 문자와 일치하는 첫 번째 s1의 문자의 포인터를 반환
// 단문자 일치하는 위치 찾기
#include <stdio.h>
#include <string.h>

int main()
{
	char *s="This is a string";
	char *ptr1, *ptr2;
	char c='s';
	ptr1=strchr(s, c);
	ptr2=strrchr(s, c);

	printf("ptr1의 위치 : %d, s의 위치 : %d\n", ptr1, s);
	printf("ptr1-s의 위치 : %d\n", ptr1-s); // strchr은 포인터를 반환하므로 prt1에서 s를 빼면
	// 일치하는 위치가 나타난다.
	printf("ptr1의 위치 : %d, s의 위치 : %d\n", ptr2, s);
	printf("ptr1-s의 위치 : %d\n", ptr2-s); // strrchr은 문자열 중에 마지막으로 일치하는곳의 포인터를 반환한다.


	return 0;
}
// 문자열 검색
#include <stdio.h>
#include <string.h>

int main()
{
	char *s1="This is a string";
	char *s2="is a";
	char *ptr;
	ptr=strstr(s1, s2); // s2의 문자열이 s1과 모두 같을 때 부터의 문자열을 출력
	printf("%s\n", ptr);
	ptr=strpbrk(s1, s2); // s2의 문자열중 첫번째 문자열이 같을때 부터의 문자열을 출력
	printf("%s\n", ptr);
	
	return 0;
}
// 문자 일치와 불일치의 연속길이를 잰다
#include <stdio.h>
#include <string.h>

int main()
{
	char *s1="ABCDEFGHI";
	char *s2="00AB111CG";
	char *s3="CDEFG1111";
	int length;

	length=strspn(s1, s2); // s1 첫번째 문자부터 순서대로 s2에 있는지 체크하고 길이를 잰다.
	printf("%d\n", length); // ABC까지 연속으로 일치하고 D는 s2에 없기때문에 3의 길이를 반환하고 끝내기 때문에 G는 체크하지 못한다.

	length=strcspn(s1, s3); // s1 첫번째 부터 s3에 없기 때문 C가 나올때 까지 길이를 잰다.
	printf("%d\n", length); // C가 나오면 일치하기 때문에 불일치한 길이를 반환한다.

	return 0;
}
반응형