C++에서의 문자열
1. C 스트링
C 스트링(C-String)은 널 문자('\0' 혹은 0)로 끝나는 char 배열을 말하며, C 언어에서 사용하는 문자열 방식이다. C++에서는 C 언어와의 호환성 때문에 C 스트링을 그대로 사용한다.
i.e.
char name1[6] = {'G', 'r', 'a', 'c', 'e', '\0'}; //'\0'으로 끝나므로 문자열이다.
char name2[5] = {'G', 'r', 'a', 'c', 'e'}; //'\0'으로 끝나지 않으므로 문자열이 아니다.
C++ 응용 프로그램은 C 스트링을 다루기 위해 C 프로그래밍에서 사용해왔던 strcpy(), strcmp(), strlen() 등의 C 라이브러리 함수들을 그대로 사용할 수 있다. 이때 <cstring>이나 <string.h> 헤더 파일을 include 해야 한다.
i.e.
//비밀번호인 C++를 입력할 때까지 무한히 반복
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char password[11];
cout << "비밀번호를 입력하시오" << endl;
while (true) {
cout<< "password: ";
cin >> password;
if (strcmp(password, "C++") {
cout << "end" << endl;
break;
} else {
cout << "암호가 틀립니다" << endl;
}
}
}
또한, cin 객체의 getline() 멤버 함수를 이용하면 공백이 포함된 문자열을 입력받을 수 있다. getline() 함수의 원형은 다음과 같다.
cin.getline(char buf[], int size, char delimitChar)
-buf : 키보드로부터 읽은 문자열을 저장할 배열
-size : buf 배열에 저장할 문자열의 길이 (배열의 크기보다 작아야 한다. 아니면 overflow 발생)
-delimitChar : 문자열 입력 끝을 지정하는 구분 문자
이때, 마지막 인수인 delimitChar은 생략이 가능하다(생략할 경우 자동으로 '\n' 문자가 구분 문자로 설정된다).
i.e.
//cin.getline()을 이용하여 빈칸을 포함하는 문자열을 읽는 예
#include <iostream>
using namespace std;
int main() {
cout << "주소를 입력하세요 >>";
char address [100];
cin.getline(address, 100, '\n'); //키보드로부터 주소 읽기
cout << "주소는" << address << "입니다\n"; //주소 출력
}
2. string 클래스
C++에서 문자열을 다루는 두 번째 방법은 C++ 표준 라이브러리에서 제공하는 string 클래스를 사용하는 방법이다. 이 방법이 편한 이유는, C 스트링을 사용할 경우에는 배열의 크기를 미리 정해야 해서 저장할 수 있는 문자열의 길이가 한정되는 반면에, string 클래스로 객체를 만들어서 문자열을 저장할 경우에는 문자열의 길이에 제한이 없어지게 된다. 이 string 클래스를 사용하기 위해서는 <string> 헤더 파일을 이용해야 한다.
i.e.
//string class를 사용해서 문자열 입력을 받고 입력 받은 문자열을 다루기
#include <iostream>
#include <string> //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 << "(hint : 첫글자는 " << elvis[0] << ")?"; // [] 연산자를 사용해서 문자열을 문자 배열로 이용
getline(cin, singer); //cin.getline 과는 조금 다른 함수. string 타입의 C++ 문자열을 입력 받기 위해 제공되는 전역 함수
if (singer == elvis) {
cout << "Correct!" << endl;
} else {
cout << "Wrong. It's " << elvis + "!" << endl;
}
}
'C++ > C++ 기본' 카테고리의 다른 글
c++ 클래스 만들기 (0) | 2018.07.02 |
---|---|
C++ 클래스와 객체 (0) | 2018.07.02 |
키 입력 받기 (0) | 2018.07.01 |
namespace와 std:: (0) | 2018.07.01 |
화면 출력 (0) | 2018.07.01 |