소프트웨어/c++

[펌] C 프로그래밍 문자열 비교 함수 (strcmp())

개발자_이훈규 2014. 12. 16. 16:55


출처 : 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()와 같음