C++/class

[C++] 문자열(string)

year.number 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;

출력 결과