IT 프로그래밍/자료구조

[C++] string 클래스와 getline 사용법

기술1 2024. 9. 6. 20:38
반응형

STRING을 사용하는 여러가지 방법

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s0;
	string s1("hello");
	string s2 = "hello";
	string s3 = string("hello");
	string s4("hello");
	string s5 = { "hello" };
	string s6 = s5;
	string s7(s5);

	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
	cout << s5 << endl;
	cout << s6 << endl;
	cout << s7 << endl;

	return 0;
}

이렇게 중괄호를 써도 되고 다양한 방법으로 string을 생성할 수 있습니다. s0은 empty string입니다. 

 

c++ string은 하나의 독립적인 개체로 보기 때문에 복사가 가능합니다. 

 

#include <iostream>
#include <string>
using namespace std;

int main() {
	string str1, str2, str3;

	cin >> str1 >> str2;

	str3 = str1;
	cout << "str3 : " << str3 << endl;

	str3 = str1 + " " + str2;
	cout << "str1 + str2 : " << str3 << endl;

	int len = str3.length();
	cout << "str3.length() : " << len << endl;

	string str4 = "hello";
	if (str1 == str4)
		cout << "Same" << endl;
	else if (str1 < str4)
		cout << "Str1 first" << endl;
	else
		cout << "Str2 first" << endl;

	return 0;
}

string은 위의 코드 예제와 같이 복사, 합치기, 길이, 비교, 부등호 < > 로 사용할 수 있습니다. 

 

str.length() 같은 것으로 길이를 셀 수 있습니다. 

 

C++에서 단어를 입력받아 저장하기

#include <iostream>
#include <string>
using namespace std;

const int MAXWORDS = 100;

int main() {
	string words[MAXWORDS];
	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> words[i];
	}
	for (int i = 0; i < n; i++) {
		cout << words[i] << endl;
	}
	return 0;
}

C언어보다 훨씬 더 간단하게 가능합니다. 마치 정수의 데이터를 다룰 때와 비슷하게 string 데이터를 다룰 수 있습니다. 이런 면에서 C++은 C언어보다 훨씬 더 사용이 편한다는 것을 알 수 있습니다. 

 

C++에서 라인 단위로 입력받기 : getline

C에서는 fgets를 사용을 했지만 C++에서는 라인 단위로 입력을 받기 위해서 getline을 사용합니다. 

 

#include <iostream>
#include <string>
using namespace std;

const int MAXWORDS = 100;

int main() {
	string line;
	while (getline(cin, line))
		cout << line << ":" << line.length() << endl;

	return 0;
}

getline 함수로 한 라인을 읽습니다.

 

getline 함수는 꼭 라인 전체를 읽는 것은 아니고 지정한 문자가 나올 때까지 읽어 주는 함수입니다. 예를들어 탭문자('\t')가 나올 때까지 읽으려면

string str;
getline(cin, str, '\t');

이렇게 해주면 됩니다.

 

그래서 실제로 getline(cin, text)는 getline(cin, text, '\n')과 동일합니다. 

 

 

반응형