Language/C [C언어] 문자열 함수/strlen, strcmp, strcpy, strcat, strchr, strrchr/ main함수의 인수/문자열을 가리키는 포인터 배열/ren
  • 728x90
    반응형

       

       

       

       

    C언어 Chapter 24.


     

     

    문자열 함수들

    • 문자열 함수는 <string.h> 파일을 #include문을 이용해서 포함시켜 사용한다.

    int strlen (char *s)

     

    • 문자열의 길이를 세어주는 함수이다.

    int strcmp (char *s1, char *s2)

     

    • cmp : compare 약자 ( 비교 )
    • 두 문자열의 사전상(아스키코드)의 위치를 비교한다. 문자열 s1과 s2의 사전상의 위치가 s1아 s2보다 빠르면 음수, s1과 s2가 같으면 0, s1이 s2보다 뒤에 오면 양수를 돌려준다.

       

     

    Ex) strcmp함수 구현

       

    < strcmp2 헤더파일 >

         

    < strcmp 구현 함수 >

          

    < test 본문 >

       

    결과 : "123", "1235" 를 한자리씩 비교하여 4째자리인 NULL과 5를 비교하여 함수내부에서 0(NULL) - 53(5의 아스키값) = -53으로 반환한다.

     

          

    int strncmp (char *s1, char *s2, int n)   

     

    strcmp() 함수와 유사하며, 처음 n개의 문자를 비교한다.  

        

    char *strcpy (char *s1, char *s2)   

     

    • s2의 문자열이 s1으로 복사 되고, s1의 첫번쨰 문자를 가리키는 포인터가 반환된다. 이때 s1이 s2의 문자열을 충분히 수용할 수 있는 공간을 확보 하고 있어야 한다.

     

     

          

    프로그램 설명

    • s1 이 s2에 복사되어 s1을 반환한다.
    • 포인터 s3로 가리키면 s1 을 반환한다

         

    결과

       

    char *strncpy (char *s1, char *s2)

     

    • s2의 처음 n개의 문자가 s1으로 복사된다.
    • s1의 첫 번째 문자를 가리키는 포인터가 반환된다.

     

     char *strcat (char *s1, char *s2)

     

    • s2의 문자열이 s1의 뒤에 첨가 되고, s1의 첫 번째 문자를 가리키는 포인터가 반환된다. 이때, s1이 충분한 공간을 확보라고 있어야 한다.

       

    Ex) strcat (char *,char *) 의 사용

         

    결과

     

    char *strchr( const char *string, int c );

     

    • string 내에서 문자 'c'가 처음 나타나는 위치를 반환 한다. 찾지 못할 경우에는 NULL 값을 반환한다. ( *string 로 주소를 반환, int c 는 아스키코드로 반환한다. )

       

    Ex) char *strchr( const char *string, int c ); 사용

         

    프로그램 설명

    • word의 E자리의 주소를 반환하여 inum에 대입하여 출력 된다.
    • strchr함수의 두번째 인자는 'E'의 아스키값으로 읽는다.

         

    결과 : 반화된 주소부터 'E'가 처음 나타나는 위치를 반환한다.

         

    결과 : 찾지못할 경우 null 반환.

          

     

    char *strrchr(char *s1, char *s2);

     

    string 내에서 문자 'c'가 마지막으로 나타나는 위치를 반환한다. 찾지 못할 경우에는 NULL값을 반환한다.

         

    Ex) char *strrchr(char *s1, char *s2); 사용

        

    프로그램 설명

    • 문자열 word 에서 E 가 두개일 때 마지막으로 나타나는 위치를 반환한다.

       

    결과 : 문자열 끝의 E의 위치로 반환하여 출력.

     

     

          

    Ex) 문자열 함수를 이용하는 프로그램

          

    프로그램 설명

    • strlen 으로 stringA의 문자열의 길이 24 를 반환.   
    • strcmp 로 stringA 의 'w'와 stringB의 ' '(빈칸) 의 아스키코드값 119 - 32 = 87 반환   
    • strncmp로 stringA의 5번째자리 'y' 와 stringB의 'y' 를 아스키값으로 비교하여 0 반환.   
    • strcpy 로 비어있는 stringC에 stringA의 문자열 복사.   
    • strncpy로 stringB의 10개의 문자가stringC에 복사됨.   
    • strcat 으로 stringA의 뒤에 stringB를 첨가.   
    • strchr 로 stringB의 'y' 자리 주소를 반환 "y and each day" = 14개 이므로 stringB의 길이는 18 이다. 즉 14 - 18 = 4 반환   
    • strrchr 로 stringB의 마지작 'y'자리 주소를 반환 = 1개 pch - stringB 이므로 stringB의 길이는 18 이다. 즉 1 - 18 = 17 반환  

       

    결과

     

    int atoi (const char *s )

     

    • ascII to integer 에서 나온 말로 문자열을 정수로 변환시킨다.
    • <stdlib.h>파일에 정의되어 있다.
    • 유사함수로 문자열을 double형 실수로 변환시키는 atof( )함수가있다.
    • 유사함수로 문자열을 long형 정수로 변환시키는 atol( )함수가있다.

     

    int itoa (int value, char *string, int radix)

     

    • 정수를 문자열로 변환시킨다.
    • long형 정수를 문자열로 변환시키는 ltoa() 함수.
    • unsigned long형 정수를 문자열로 변환시키는 ultoa() 함수.

         

    Ex) itoa( ) 함수 구현   

          

    결과

       

    Ex) itoa( ) 함수와 atoi( ) 함수의 사용

             

    결과

    💡 gcc 에서는 itoa 함수가 되지 않는다.

     

          

     

    문자열을 다루는 배열

    💡 stdio.h 의 std(Standard Library) 자주쓰는 함수를 지원한다.

    • 문자열의 배열을 2차원 배열로 구성하는 경우

       

    Ex) 학생의 이름을 입력하여 컴퓨터학과 학생인지를 판단하는 프로그램.

          

    프로그램 설명

     

    초기화된 2차원 배열 student의 메모리할당 값

     

    • #define NAMELEN 15 :15byte 변수 선언

         

    결과

         

    Ex) 문자열을 다루는 2차원 배열에 이름을 키보드로부터 받아들이는 프로그램.

         

    프로그램 설명

     

    student[5][20];

     

    • 학생 5명 이름은 NULL을 뺀 19자 까지 가능하고, 한글은 2byte이므로 9자 까지 가능
    • gets 로 2차원 배열에 문자열을 저장
    • puts 로 출력
    • stack 영역만 존재하는 소스이다.

         

    결과 : 완전 좋아 !!!

         

     

    문자열을 가리키는 포인터 배열

    Ex) 문자열 포인터를 이용하여 이름을 알파벳 순으로 정렬하는 프로그램

          

    프로그램 설명

    • 5 X 15 = 75byte 2차원 배열이다.
    • 포인터 배열은 버블정렬 을 위해 사용.

       

    [ 정렬 전의 문자열 ]

          

    [ 정렬 후의 문자열 ]

       

    [ 핵심 알고리즘 ]

    • student[ ][ ] 배열 자체는 정렬 되지 않지만 포인터 *stptr[] 이 정렬하여 가리키는 형태이다.
    • 배열의 이동이 없어서 데이터의 이동을 최소하며 포인터로 가리킨다.

         

    결과

          

     

    main() 함수의 인수

    Ex) main ( int inum, char *string[ ] ) main함수에 인자를 넣었을 때, *string[ ] 의 의미.

         

    • string[0] 은 [실행파일이름] 을 출력

         

    결과

         

     

    Ex) main ( int inum, char *string[] ) main( )에 인자를 넣었을 때, inum 의 의미.

         

    • inum 은 문자 개수를 가리킨다.

       

    결과

         

     

    Ex) 명령어행을 출력하는 프로그램    

       

    결과

          

     

    Ex) 실행파일 이름을 변경할 수 없게 하는 소스

           

    결과: 실행 파일 이름이 ./EMB 가 아닐경우 if문의 경고 메시지만 출력하고 종료한다.

     

    💡 cl 컴파일은 컴파일시 소스파일 이름과 동일하게 컴파일 하므로 ren(rename)으로 파일 이름을 변경하여 사용한다.
    ex) ren main.exe EMB.exe

     

       

       

       

       

     

       

       

      

    728x90
    반응형
상단으로