ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 문자열(string)
    C++/class 2022. 6. 9. 16:25

     

    C++에서 문자열을 나타내는 방법

    1. 문자 배열을 생성해서 문자열을 저장하고, 맨 끝에 NULL문자를 추가하는 방법

    2. string 클래스를 사용하는 방법(추후)

     

    a 'a' "a"
    변수 a 하나의 문자,
    아스키 코드값과 같음
    문자열,
    끝에 NULL문자 추가

    문자 배열의 초기화

    char str[6] = "HELLO";

    1. 문자열 상수를 할당하면 컴파일러가 자동으로 끝에 NULL 문자 추가

    2. 배열의 크기는 문자열보다 +1 되어야 함(NULL 문자)


    문자열의 길이를 구하는 프로그램

        cout << "\n문자열의 길이 구하기\n";
        char strCount[80] = "C++ is very easy to me";
        int x = 0;
        
        while(strCount[x] != '\0'){
            x++;
        }
        cout << "문자열의 길이는 " << x << "입니다.";

     1. 문자열의 끝에 NULL문자('\0')을 만나기 전까지 x의 값 1씩 증가시킨다.

     2. 라이브러리 함수로도 값을 구할 수 있다.

          // #include <cstring> 필요

          cout << "문자열 " <<str3 << "의 길이는 " << strlen(strCount) <<"입니다\n" << endl;


    문자열 라이브러리 함수

    함수 설명
    strlen(s) 문자열 s의 길이를 구한다
    strcpy(s1, s2) s2를 s1에 복사한다(방향 주의!)
    strcat(s1, s2) s2를 s1의 끝에 붙여넣는다
    strcmp(s1, s2) s1과 s2를 비교한다
    strchr(s, c) 문자열 s 안에서 문자 c를 찾는다
    strstr(s1, s2) 문자열 s1에서 문자열 s2를 찾는다

     [TIP] strcpy_s를 쓰는 게 좋다(자리수가 다른 경우 미리 검사)


    문자열의 복사

    1. looping 이용

    2. 라이브러리 함수 이용

     

    [Key Point]

     

        // #1-1. str20, str5 문자열의 길이 구하기

        int length1 = strlen(str20);

        int length2 = strlen(str5);

        

        // #1-2. str20 문자열 뒤에 str5 문자열 합치기

        for (int i = 0; i<length2; i++){

            str20[length1] = str5[i];

            length1++;

        }

        

        // #1-3. 합쳐진 문자열 끝에 NULL 문자 추가하기

        str20[length1] = '\0';

      

    //
    //  문자열
    //
    //  Created by yeonsu on 2022/06/09.
    //
    
    #include <iostream>
    using namespace std;
    
    int main(){
        
        // 문자열 합치기
        cout << "\nstrcat: 문자열 합치기" << endl;
        
        // "digital" + "media"
        char str20[21] = "digital";     // 한글 10글자까지 저장 가능
        char str5[6] = "media";
        
        cout << "\nstr20: " << str20 << endl;
        cout << "str5: " << str5 << endl << endl;
        
        // str20 = str20 + "media";     // a += b; 처럼 '+'연산자를 이용해서 합칠 수 없다.
        
        
        // #1. loopig 이용해서 문자열 합치기
        cout << "#1. loopig 이용해서 문자열 합치기" << endl;
        
        // #1-1. str20, str5 문자열의 길이 구하기
        int length1 = strlen(str20);
        int length2 = strlen(str5);
        
        // #1-2. str20 문자열 뒤에 str5 문자열 합치기
        for (int i = 0; i<length2; i++){
            str20[length1] = str5[i];
            length1++;
        }
        
        // #1-3. 합쳐진 문자열 끝에 NULL 문자 추가하기
        str20[length1] = '\0';
        
        cout << str20 << endl;
        
        
        // #2. 함수를 이용해서 문자열 합치기
        cout << "\n#2. 함수를 이용해서 문자열 합치기" << endl;
        
        char str21[22] = "digital";
        cout << strcat(str21, str5) << endl << endl;
        
        return 0;
    }

    문자열의 비교

    [결과값]

    음수: s1 < s2

    0:   s1 == s2

    양수: s1 > s2

        // 문자열의 비교
        
        cout << "\n문자열의 비교" << endl;
        cout << "\n#1. 일반적인 방법\n" << endl;
        char str1[5] = "PINK";
        char str2[6] = "BROWN";
        
        cout << "str1: " << str1 << endl;
        cout << "str2: " << str2 << endl << endl;
        
        if(str1 == str2){
            cout << "같습니다."<<endl;
        }
        else
            cout << "다릅니다." <<endl;
        
        
        cout << "\n#2. 함수를 이용하는 방법" << endl;
        if(strcmp(str1, str2) == 0){
            cout << "같습니다." << endl;
        }
        else
            cout << "다릅니다." << endl;

    문자열 속에 문자   

        strchr(str, c)의 반환값: 문자의 시작 주소 반환

                                              미발견시 NULL 주소값 (0) 반환

     

        cout << "\nstrchr: 문자열 속의 문자" << endl;
        
        char str3[] = "a";
        
        strcpy(str3, "digital");
        strchr(str3, 't');               //str3 속에 't'문자가 있는가?
        
        // strchr을 통해 주소값을 반환받음 -> 포인터 활용
        char *p;
        
        p = strchr(str3, 't');
        
        if (p==NULL)
            cout << "존재하지 않습니다." << endl;
        else
            cout << p << endl;          //tal 출력

    문자 처리 라이브러리 함수

        //문자 처리 라이브러리 함수
        
        cout << "\n문자 처리 라이브러리 함수" << endl;
        char c = 'A';
        
        if(isupper(c))
            cout << "대문자입니다." << endl;
        else
            cout << "대문자가 아닙니다." << endl;

    출력 결과

Designed by Tistory.