목적
  - 문자열을 동적 할당으로 입력받아 자소를 비교 한다.

문제

사용자 삽입 이미지
코드

#include <iostream>
#include <cstring>
#include <ctype.h>

using namespace std;

int main(void)

{
 char sIn[255] = {0};
 int i, iAlpha, iSpace, iSpecial, iMoum;
 i = iAlpha = iSpace = iSpecial = iMoum = 0;
 char cBuf;
 char* sString = NULL;

 cout << "문자열 입력 : ";
 cin.getline(sIn,255);

 sString = new char[strlen(sIn) + 1];
 strcpy(sString, sIn);

 while(sString[i] != 0)
 {
  if(isalpha(sString[i]))
   iAlpha++;

  if(isspace(sString[i]))
   iSpace++;

  if(ispunct(sString[i]))
   iSpecial++;
 
  cBuf = tolower(sString[i]);

  if(cBuf == 'a' || cBuf == 'e' || cBuf == 'i' || cBuf == 'o'
   || cBuf == 'u')
   iMoum++;

  i++;

 }

 cout << "문자열의 길이 : " << strlen(sString) << endl;
 cout << "알파벳문자 개수 : " << iAlpha << endl;
 cout << "공백문자   개수 : " << iSpace << endl;
 cout << "특수문자   개수 : " << iSpecial << endl;
 cout << "모음의     개수 : " << iMoum << endl;

 return 0;
}



해설
  - 문자별료 배열 포인터를 지정 하여 자소별로 접근할수 있게 했습니다.
  - A E I O U / a e i o u 는 소문자로 일괄적으로 비교하여 비교하게 했습니다.

참고
  - 유사 문제 검색

Posted by 카켈




목적
  - 문자열에서 특정 문자를 추려서 계산한다.
문제

사용자 삽입 이미지

코드

#include <iostream>
#include <ctype.h>

using namespace std;


int main(void)
{
 char sIn[255] = {0};
 int iCount, iMo, iSpace;
 iCount = iMo = iSpace = 0;
 cout << "문자열을 입력하세요 : ";
 cin.getline(sIn,255,'\n');

 while(sIn[iCount] != 0)
 {
  switch(tolower(sIn[iCount]))
  {
   case 'a':
    iMo++;
    break;

   case 'e':
    iMo++;

    break;
   case 'i':
    iMo++;
    break;
   
   case 'o':
    iMo++;
    break;

   case 'u':
    iMo++;
    break;

   case ' ':
    iSpace++;
    break;

   default:
    break;

  }

  iCount++;
 }

  cout << "문자의 수 : " << iCount << endl;
  cout << "모음의 수 : " << iMo << endl;
  cout << "공백의 수 : " << iSpace << endl;

 return 0;

}


해설
  - 모음에는대소문자를 가리지 않으므로 소문자로 일괄처리하여 속도를 빠르게(?) 했습니다.
  - 공백은 ' ' 로 처리하면 됩니다.
  - switch-case 문은 이전 문제에서 많이 다루었기 때문에 특별히 언급하지 않겠습니다. 키로그를 참조하시기 바랍니다.

참고
  - 유사 문제



Posted by 카켈



1. 목적

  - 문자열 속의 문자 제어를 이해한다.

2. 문제 (점수 : 10 점)
  - 키보드로부터 문자열을 입력 받아 모음(a/A, e/E, i/I, o/O, u/U)만을 출력하고 그 갯수를 출력
    하는 프로그램을 작성하라.
  - 출력 화면

문자들을 입력하세요 : Hello World. Hi there. I'm a boy..
eooieeIao
모음의 개수 : 9개

3. 이해
  - 문자를 다룰줄 아는가?
  - 조건문을 쓸줄 아는가?

4. 코드

#include <stdio.h>

int main()
{
 char in[255];
 int i,count;
 i = count = 0;

 printf("문자들을 입력하세요 : ");
 gets(in);

 while(in[i] != 0)
 {
  if ((in[i] == 'a' || in[i] == 'e' || in[i] == 'i' || in[i] == 'o' || in[i] == 'u') || (in[i] == 'A' || in[i] == 'E' || in[i] == 'I' || in[i] == 'O' || in[i] == 'U'))
  {
   putchar(in[i]);
   count++;
  }

  i++;

 }

 putchar('\n');
 printf("모음의 개수 : %d개\n", count);

 return 0;

}

5. 해설
  - if 문으로 모음이 되는 조건을 or 연산자(||)를 써서 구분했습니다.
  - gets 문으로 띄워 쓰기 포함(whitespace) 문장을 받을수 있습니다.

6. 참고
  -
http://www.winapi.co.kr/clec/cpp1/4-1-2.htm : 조건문
  - 유사 문제
 

Posted by 카켈
이전페이지 1 다음페이지