CPP 문자열(프로그래밍 예제)

Copyright (c) 2016-, All Rights Reserved by Kwanghoon Choi
(아래 CPP 프로그래밍 강의 교재의 내용을 자유롭게 이용하되 다른 웹 사이트 등을 통한 배포를 금합니다.)

목차

3. 문자열 프로그래밍 예제

 3.1 Palindrome 프로그램

입력받은 문자열이 앞에서 읽어오거나 뒤에서 읽어오거나 동일한 단어가 되는지 여부를 검사하는 프로그램을 작성한다. 예를 들어, deed, radar, mom, racecar는 모두 팰린드롬 단어다.

단어를 입력받아 어떤 일을 수행하는 것을 (입력의 끝에 도달할 때까지) 반복하는 구조는 다음과 같이 작성한다.

string word;
while ( cin >> word ) {
   // do something
}

입력받은 단어가 팰린드롬인지 확인하려면 양쪽 끝 첨자 위치에서 부터 중앙으로 이동하면서 차례대로 두 문자를 비교해서 동일한지 살펴보는 방법을 사용할 수 있다.

string word;
int i, j;
while ( cin >> word ) {
   i = 0; // 앞쪽 끝 첨자
   j = word.length()-1;  // 뒷쪽 끝 첨자
   while ( i <= j ) {
     if ( word[i] == word[j] ) {
       i = i+1;
       j = j-1;
     }
     else
       break;
   }
   if ( i <= j ) cout << "Not palindrome" << endl;
   else cout << "Palindromd" << endl;
}

 

Q8. 확장된 팰린드롬을 고려한 프로그램을 작성하시오.

  • 하나의 단어 대신 한 줄을 입력 받도록 바꾸고
  • 공백이나 구두점을 제외하고 대소문자를 동일한 문자로 가정해서 팰린드롬 검사를 진행한다.
  • 예를 들어, "Madam, I'm Adam."은 팰린드롬 문자열이다. 왜냐하면, 공백과 구두점을 제거하고 모두 소문자로 바꾸어 생각해보면 "madamimadam"이기 때문이다.

(힌트: 한 줄을 입력받아 어떤 일을 수행하는 것을 반복하는 구조는 다음과 같이 작성한다.)

string line;
while ( cin.eof() == false ) {
   getline( cin, line );
   // do something
}

 3.2 단어와 알파벳의 수를 세는 프로그램

한 줄을 입력 받아 그 안에 포함된 단어의 수와 알파벳의 수를 세는 프로그램을 작성한다.

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

int count_word (const string& s);
int count_alpha(const string& s, int count[]);

int main() {
  string line;
  int count[26], n_word, i;

  getline( cin, line );

  count_alpha( line, count );
  n_word = count_word( line );

  cout << "# of words: " << n_word << endl;
  for (i=0; i<26; i++)
    cout << (char)('a'+i) << " : " << count[i] << endl;

  return 0;
}

Q9. 위의 프로그램에서 기대하는 일반 함수 count_alpha와 count_word를 작성하시오.

(힌트: count_word 함수에서 단어를 세는 방법은 istringstream 클래스를 사용한다.

istringstream ist( s );   // s를 입력 받은 문자열로 가정
string w;
int count = 0;
while ( ist >> w) count= count+1;

)

Leave a Reply

Your email address will not be published. Required fields are marked *