출처 : http://ra2kstar.tistory.com/85
C 프로그래밍 문자열 비교 함수 (strcmp())
두 문자열을 비교하기 위해서 어떻게 하면 될까.
JAVA의 경우 equals() 를 이용하면 true, false 값을 얻어 올 수 있지만.. c 에서도 그런 것이 있을까?
물론 C에서도 두 문자열을 비교하는 함수는 존재하며, 그 종류도 다양한다.
strcmp()
기능
두 문자열을 비교
기본형
int strcmp(const char *s1, const char *s2);
s1 : 문자열
s2 : 문자열
반환값
s1>s2 : 양수 , s1==s2 : 0 , s1<s2 : 음수
헤더
string.h
strcmp()는 문자열 비교 함수 중에서 가장 많이 사용될 것이라 생각되는 함수이다. 기본적으로 두 문자열이 같은지를 확인할 때 사용된다.
다음은 두개의 파일에서 문자열을 입력받아, 배열에 저장한 후, 두 문자열을 비교하여 다른 문자열만 출력하는 소스이다.
소스예제
#include <stdio.h>
#include <string.h>
#define MAX 1024
int retToken(char* ori[], char* ptr);
int inputFile(char* source, char*arr[]);
main(){
int index_ori, index_temp, data;
char* ori[MAX];
char* temp[MAX];
//함수를 이용한 배열에 값 입력하기
index_ori = inputFile("temp1.txt", ori);
index_temp = inputFile("temp2.txt", temp);
for(data = 0 ; data < index_ori ; data++){
// 두 텍스트를 비교하여 다르면 출력
if(strcmp(ori[data] , temp[data]) !=0 ){
printf("%s \t %s \n " , ori[data], temp[data]);
}
}
}
// 파일 입력 함수
int inputFile(char* source, char* arr[]){
FILE *fp = fopen(source , "r");
int buf_size = MAX*MAX;
char* inp = malloc(buf_size);
int index = 0;
while(fgets(inp,buf_size, fp)){
index = retToken(arr, inp);
}
fclose(fp);
return index;
}
// 배열에 값 입력하는 함수
int retToken(char* ori[] , char *inp){
int i = 0;
char* ptr = strtok(inp, ";");
while(ptr != NULL){
ori[i] = ptr;
ptr = strtok(NULL, ";");
i++;
}
return i;
}
결과 화면
strcmp()외에 문자열을 비교하는 함수에 대해 더 알아 보겠다.
strncmp()의 경우, 처음 n개의 문자만 비교하게 된다 .
strncmp()
기능
두 문자열의 n개의 문자를 비교
기본형
int strncmp(const char *sq, const char *s2, size_t n);
s1 : 문자열
s2 : 문자열
n : 비교할 문자의 개수
반환값
s1>s2 : 양수 , s1 == s2 : 0 , s1<s2 : 음수
헤더
string.h
strcmp()와 strncmp()의 경우는 대소문자를 구별하지만, 대소문자를 구별하지 않고 비교할 수 있는 함수도 있다.
strcasecmp()
기능
대소문자를 구별하지 않고 두 문자열을 비교
기본형
int strcasecmp(const char *s1, const char *s2);
s1: 문자열
s2: 문자열
반환값
s1>s2 : 양수 , s1 == s2 : 0 , s1<s2 : 음수
해더
strcmp()와 같음
strncasecmp()
기능
대소문자를 구별하지 않고 두 문자열의 n개의 문자를 비교
기본형
int strncasecmp(const char *sq, const char *s2, size_t n);
s1 : 문자열
s2 : 문자열
n : 비교할 문자의 개수
반환값
s1>s2 : 양수 , s1 == s2 : 0 , s1<s2 : 음수
헤더
strcmp()와 같음
'소프트웨어 > c++' 카테고리의 다른 글
상속에 대해서 (0) | 2015.01.14 |
---|---|
함수의 괄호 뒤에 const를 넣는 이유에 대해서 (0) | 2014.12.17 |
printf에서 %d %09d %19d의 차이에 대해서 (0) | 2014.11.18 |
[c++] snprintf, sprintf 예제 (0) | 2014.11.18 |
2차배열 동적 할당, 교환하기 등. (0) | 2014.11.14 |