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

C++ 72제] vector 사용, 영문 문장의 첫글자를 대문자로 변환하기.

by 건티 2022. 8. 24.
728x90

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

 

문제]

임의의 영문 문자열을 입력하여 입력된 문자열 중 문장의 첫 문자만 대문자로 출력하는  프로그램을 작성하시오. (, 공백은 한 칸만 출력하시오.)

 

출력 예)

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

 

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

I like kunti.

You know!

Why?

 

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

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

다시 입력하세요...

 

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

 

영문 문자열을 입력하시오 : What kind of language do you like?    I like C++.

 

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

What kind of language do you like?

I like c++.

 

계속하시겠습니까?(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 W;//단어 변수 
   string Str_Add;//단어를 합쳐서 문자열로 만드는 변수 
   vector<string> v;//문자열에서 분리한 문장 단위로 넣을 vector변수
   int i,j;//반복 또는 인덱스 변수
   char ch;//계속여부 체크하는 변수 

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

      istringstream str(Str);//문자열을 단어단위로 구분한다. 

      //단어에서 문자열을 만들어 저장한다.
      Str_Add="";
      while(str>>W)
         if(W.at(W.length()-1)=='.' || W.at(W.length()-1)=='!' || W.at(W.length()-1)=='?')
         {
            Str_Add+=W;
            v.push_back(Str_Add);//만들어진 문장을 vector에 저장한다. 
            Str_Add="";//새로운 문자열을 체크하기 위하여 기존 문자열을 지운다. 
         }
         else
         {
            Str_Add+=W;
            Str_Add+=" ";
         }

 

      //문장의 첫글자는 대문자로 나머지는 소문자로 변환한다.
      for(i=0;i<v.size();i++) 
      {
         v[i][0]=toupper(v[i][0]);
         for(j=1;j<v[i].size();j++)
            v[i][j]=tolower(v[i][j]);
      }

      //결과출력
      cout << "\n입력된 문장은 아래와 같습니다.\n";
      for(i=0;i<v.size();i++)
         cout << v[i] << endl;

      //계속여부를 체크한다.
      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;
      cin.ignore();//버퍼에 남아있는 '\n'을 지운다.
      v.clear();//vector를 깨끗이 지운다. 
      cout << endl;
   }
   cout << "수고하셨습니다.\n";

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

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

 

반응형

댓글