https://www.acmicpc.net/problem/10808
10808번: 알파벳 개수
단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.
www.acmicpc.net
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.
풀이
string 타입으로 입력 받고 알파벳 개수를 세서 'a부터 z까지 전부' 출력하기 때문에 26짜리 배열을 만들어둔다. 각 알파벳은 인덱스 번호와 같다(ex. a-1, b-2, z-26).
현재 문자 S[i]에서 문자 'a'의 ASCII 값(97)를 빼면 현재 문자가 알파벳 'a'부터 시작하여 몇 번째 알파벳인지 알 수 있다. 예를 들어 'a'의 경우에는 a - a가 되어 0이 되고 'b'는 b - a로 1이 된다. 이런 식으로 현재 문자가 가리키는 알파벳의 인덱스에 접근하여 값을 1씩 증가시킨다. 이 과정을 입력받은 문자의 길이만큼 반복하면 배열이 완성된다.
코드
#include <iostream>
#include <string>
using namespace std;
int main() {
string S;
cin >> S;
int arr[26]={0,};
for(int i=0;i<S.length();i++)
arr[S[i]-'a']+=1;
for(int i=0;i<26;i++)
cout << arr[i] << " ";
return 0;
}