프로그래밍/C, C++

[C++] 알파벳 개수 세기 (tolower, toupper)

pxatd 2020. 8. 13. 22:35
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