티스토리 뷰

2.4 C++ 문자열 처리


(1)C-스트링으로 문자열 다루기

- strcmp(), strlen(), strcpy() 등

- strcmp() : 배열을 이용해 입력받을 시 사용하는 문자열 비교 함수

 

* 사용할 헤더파일

#include<cstring>

.....

int n = strlen("Hello");

 

* c-스트링 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<cstring>
int main() {
    using namespace std;
    
    char password1[10];
    char password2[10];
 
    cout << "새 암호를 입력하세요.>>";
    cin >> password1;
 
    cout << "새 암호를 입력하세요.>>";
    cin >> password2;
 
    if (strcmp(password1, password2) == 0)//"password1 == password2" 로는 안됨.
        cout << "같습니다.\n";
    else
        cout << "같지 않습니다.\n";
}
cs

 

 

(2)string 클래스로 문자열 다루기

* string 클래스

- C++ 표준 클래스

- 문자열 크기 제약이 없다.

*string 클래스가 스스로 문자열 크기게 맞게 내부 버퍼 조절

- #include<string> 헤더파일을 포함하여야 한다.

- getline() : string 타입의 문자열을 입력 받기 위해 제공되는 전역 함수

 

* 사용할 헤더파일

#include<string.h>

...

 

* string 클래스 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<string>
 
using namespace std;
 
int main() {    
    string song("Falling in love with you");// 문자열 song
    string elvis("Elvis Presley");// 문자열 elvis
    string singer; // 문자열 singer
 
    cout << song + "를 부른 가수는"//+ 로 문자열 연결
    cout << "(힌트: 첫 글자는 " << elvis[0<< ")?"// []연산자 사용
 
    getline(cin,singer);//문자열 입력
    if (singer == elvis)//문자열 비교
        cout << "맞았습니다." << endl;
    else
        cout << "틀렸습니다. 정답은 " + elvis + "입니다." << endl;
}
cs

* C++ 공백이 있는 문자열 처리 예제 (주소를 입력받는 문자열 예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<string>
 
using namespace std;
 
int main() {    
    //주소를 입력 받는 문자열 예제
    cout << "주소를 입력하세요 : " << endl;
    char address[100];
    cin >> address;
 
    cout << "입력한 주소는 \"" << address << "\""<< endl;
 
    return 0;
}
cs

 

- 위의 코드(line 10)로는 공백을 받을 시 입력이 제대로 이루어지지 않는다.

 

* 공백도 입력을 받는 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<string>
 
using namespace std;
 
int main() {    
    //주소를 입력 받는 문자열 예제
    cout << "주소를 입력하세요 : " << endl;
    char address[100];
 
    cin.getline(address, 100'\n');
    cout << "입력한 주소는 \"" << address << "\""<< endl;
 
    return 0;
}
cs

 

- line 11에서 getline() 함수를 이용해 엔터(\n)를 입력할 때 까지 문자열을 받도록 코드를 작성한다.

* geline() 사용 형식

cin.getlin(char buf[], int size, char delimitChar)

 

- buf문자열을 저장할 배열, sizebuf[] 배열의 크기, delimitChar은 문자열의 을 지정하는 구분 문자를 의미한다. 

댓글