오늘은 문자열을 비교하여 일치하는 단어를 찾아보는 실습을 합시다.
문장을 각 단어로 쪼개는 방법에 대해서는 예전 문자열 관련 post에서 이야기를 한적이 있습니다.
#include
stringstream sstr1("문장");
string str_buf;
sstr1>>str_buf;
이렇게 stringstream 클래스 객체를 이용하여 각 단어(문자열)을 str_buf 문자열 변수에 저장하게 됩니다.
계속 문장의 단어가 끝날 때까지 단어를 추출하기 위해서 다음과 같이 while문을 이용하면 좋습니다.
while(sstr1>>str_buf){
str_buf 처리;
}
이러면 단어를 추출하여 str_buf 문자열 변수에 저장하는데 마지막 단어(문자열)를 추출할 때까지 계속 읽어오게 됩니다.
다음으로는 각 단어를 읽어 왔다면 원하는 단어와 일치하는지를 비교해 보아야 합니다. compare() 함수를 이용하여 단어 비교를 해보았네요.
string str_buf="aaa";
str_buf.compare("aaa");
이렇게 하면 compare()함수는 일치하면 '0'을 반환하고 일치하지 않으면 '1'을 반환하게 됩니다. 위 결과는 두 문자열이 일치하기 때문에 반환값은 '0'을 반환 됩니다.
이제 단어를 쪼개고 그 단어를 원하는 단어와 비교를 하는 원리를 배웠습니다. 그럼 실제로 코딩해서 결과가 제대로 나오는지 살펴 볼까요.
[전체소스]
#include
#include
#include
using namespace std;
int main(int argc, char** argv) {
string str="aaa bbb ccc";
string str_buf;
stringstream sstr1(str);
int state;
while(sstr1>>str_buf){
cout<<str_buf<<endl;
cout<<str_buf.compare("aaa")<<endl;
}
return 0;
}
[결과]
결과를 보면 aaa라는 단어를 비교 할 때에는 '0'이 반완되고 다른 단어에 경우는 전부 '1'이 반환 되었네요.
오늘은 두가지 원리를 이용하여 특정 문장을 가지고 거기에 들어있는 특정 단어를 비교해 보는 실험을 해 보았습니다. 간단한 예를 들기 위해서 문장을 단순하게 일련 알파벳으로 했는데 정상적 문장에서도 아무 문제 없이 사용 할 수 있음으로 이 원리를 이용하면 재밌는 다양한 실험을 할 수 있을 거에요.