본문 바로가기
프로그램/C++ 1000제

C++ 71제] vector사용, 영문 문자열을 문장 단위로 출력하기.

by 건티 2022. 8. 23.
728x90

출처 : 반크_세계유산 창덕궁

 

문제]

임의의 영문 문자열을 입력하여 입력된 문자열을 문장별로 출력 예와 같이 나타내고  단어의 개수와 문장의 개수를 각각 구하는 프로그램을 작성하시오.

 

출력 예)

영문 문자열을 입력하시오 : I Like KunTi. You Know! Why?

 

입력된 문장은 아래와 같습니다.

I Like KunTi.

You Know!

Why?

그러므로 입력된 단어는 6개이고, 문장은 3개입니다.

 

계속하시겠습니까?(Y/N) u

Y/y/N/n만 입력하세요.

다시 입력하세요...


계속하시겠습니까?(Y/N) N

수고하셨습니다.

 

 

참고풀이]

#include <iostream>
#include <vector>
#include <string> //string, getline()
#include <sstream> //istringstream()
#include <cctype>  //touper(), tolower()
using namespace std;

int main()
{
   string Str;//문자열 입력변수
   string Word;//단어 변수 
   string Str_Add;//단어를 합쳐서 문자열로 만드는 변수 
   vector<string> v;//문자열에서 분리한 단어 넣을 vector변수
   vector<string> vStr;//단어에서 문자열 단위로 저장할 vector변수 
   int i;//반복 또는 인덱스 변수
   char ch;//계속여부 체크하는 변수 

   while(true)
   {
      cout << "영문 문자열을 입력하시오 : ";
      getline(cin, Str);
      istringstream str(Str);

      //vector에 단어 단위로 저장한다.
      while(str>>Word)
      v.push_back(Word);

      //단어에서 문자열을 만들어 저장한다.
      Str_Add="";
      for(i=0;i<v.size();i++)
         if(v[i].at(v[i].size()-1)=='.' || v[i].at(v[i].size()-1)=='!' || v[i].at(v[i].size()-1)=='?')
         {
            Str_Add+=v[i];
            vStr.push_back(Str_Add);//만들어진 문장을 vector에 저장한다. 
            Str_Add="";//새로운 문자열을 체크하기 위하여 기존 문자열을 지운다. 
         }
         else
         {
            Str_Add+=v[i];
            Str_Add+=" ";
         }

      //결과출력
      cout << "\n입력된 문장은 아래와 같습니다.\n";
      for(i=0;i<vStr.size();i++)
         cout << vStr[i] << endl;
      cout << "그러므로 입력된 단어는 " << v.size() << "개이고, ";
      cout << "문장은 " << vStr.size() << "개입니다.\n";

      //계속여부를 체크한다.
      while(true)
      {
         cout << "\n계속하시겠습니까?(Y/N) ";
         cin >> ch;
         if(toupper(ch)=='Y' || toupper(ch)=='N') break;
         cout << "Y/y/N/n만 입력하세요.\n";
         cout << "다시 입력하세요...\n";
      }
      if(toupper(ch)=='N') break;

 

      //vector와 cin을 깨끗이 한다.

      cin.ignore(); //버퍼에 남아있는 '\n'을 지운다.

      v.clear();

      vStr.clear();
   }
   cout << "수고하셨습니다.\n";

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도

 

 

반응형

댓글