C++/C++ 기본

C++에서의 문자열

검정비니 2018. 7. 1. 21:26
728x90
반응형

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