728x90
명품 C++ p.94 16번 문제
-영문 텍스트를 입력받아 알파벳 개수를 센 후 히스토그램을 그리는 프로그램을 작성
-대문자는 모두 소문자로 집계한다.
-텍스트 입력의 끝은 ';' 문자로 한다.
tolower은 대문자를 소문자로 변환
toupper는 소문자를 대문자로 변환하는것이다.
나는 간단하게 tolower 를 이용하여 대문자를 소문자로 바꿔보았다.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char paragraph[10000];
int count = 0;
int cnt[26] = { 0 };
cout << "영문 텍스트를 입력하세요. 히스토그램을 그립니다. \n텍스트의 끝은 ; 입니다. 10000개까지 가능합니다.\n";
cout << "---------------------------------------------\n\n";
cin.getline(paragraph, 10000, ';');
int l = strlen(paragraph);
for (int b=0; b < l; b++)
{
paragraph[b] = tolower(paragraph[b]);
}
for (int i = 0; i < l; i++)
{
if (isalpha(paragraph[i]) != 0)
{
for (int j = 0; j < 26; j++)
{
if (paragraph[i] == (j + 'a'))
cnt[j]++;
}
}
}
cout << "\n---------------------------------------------\n";
for (int k = 0; k < 26; k++)
{
if (cnt[k] > 0)
{
cout << (char)(k + 'a') << ":" ;
for (int c = 0; c < cnt[k]; c++)
{
count += cnt[c];
cout << "*";
}
cout << "\n";
}
}
cout << "알파벳 총 개수:"<<count;
return 0;
}
실행 화면:
C++에서 아스키코드를 활용한 문제는 많이 출제된다고 하니 가장 기본형인 이 문제를 잘 익혀두어야 한다. 나 역시도 C++을 배운지 몇 일 되지 않았기 때문에 문법이나 함수 사용, 코드 구현 등 에서 어색하지만, 잘 모르는 문법은 몇 시간에 걸쳐 구글링으로 알아내는 재미가 쏠쏠하다. (앞으론 배열에 값을 저장하는 코드를 짤 때 좀 더 주의를 기울여야 겠다.)
그리고 이건 계속 오류가 났던 부분인데.. 42,43번째 줄 코드에 자꾸 count+=cnt[c] 코드가 들어가면 "*" 이 제대로 출력이 안되길래 혹시나 했더니.. 역시 {} 괄호의 문제였다. 파이썬에서는 tab간격으로만 코드의 종속을 인식해서 괄호를 잘 사용하지 않았던 것 같은데 C나 C++은 괄호를 넣어주지 않으면 어김없이 오류가 나더라 간단한 오류인데 찾지 못할 땐 전체 코드를 살펴봐야하기때문에 힘이 빠진다. 다음부터는 괄호를 잘 써줘야지
728x90
'프로그래밍 > C, C++' 카테고리의 다른 글
[C] 백준 2839번 설탕배달 🧁 (0) | 2021.01.30 |
---|---|
[C]백준 1712 손익분기점 (0) | 2021.01.18 |
[C]백준 5622 다이얼 (문자열) (0) | 2021.01.10 |
[C]백준 1152 단어의 개수 (gets) (0) | 2020.11.30 |
[C]백준 4673 셀프넘버 (bool) (0) | 2020.11.02 |