[C++ 언어-기초실습-2] 알파벳 개수 세기

in #kr-dev5 years ago (edited)

[C++ 언어-기초실습-2] 알파벳 개수 세기



오늘의 C++ 실습은 영어 문장을 입력 받았을 때 그 문장에서 알파벳이 얼마나 쓰였는지 세는 프로그램을 실습하고자 합니다.

1. 알파벳 입력


알파벳 문장을 입력 했을 때 문장을 한번에 읽어와서 알파벳을 세고자 한다면 어떻게 해야 할까요.

char ch[100];
cin.getline(ch,100);

getline()함수로 해서 최대 100글자를 읽어오는데 여기서 문자의 끝은 enter가 됩니다. 즉, enter를 친 문장까지 읽어오게 됩니다.

2. 알파벳 비교


a - z : 97 - 122
A - Z : 65 - 90

알파벳의 범위는 위와 같습니다. 이 범위를 체크해서 쓰여진 알파벳의 개수를 세면 됩니다.

if(ch[i]>=65 && ch[i]<=90){ //대문자 비교
    pos=ch[i]-65;           
    ck[pos]+=1;         
}
else if(ch[i]>=97 && ch[i]<=122){ //소문자 비교
    pos=ch[i]-97;       
    ck[pos]+=1;         
}       

이렇게 읽어온 ch[] 문자열에서 각 문자를 if문으로 비교하면 됩니다. 이때 문장안에 알파벳만 개수를 세어야 하기 때문에 알파벳 범위를 위와 같이 대문자인지 소문자인지 체크하게 됩니다.

참고로,

int ck[26]; //알파벳 카운터 배열

ck[]배열로 ck[0]은 'a'이고 chk[25]은 'z'로 알파벳의 위치를 지정해 놓았을 때

pos=ch[i]-65; //대문자
pos=ch[i]-97; //소문자

이렇게 위치를 잡습니다. 그리고 그 위치를 아래와 같이 +1씩 증가시키면 알파벳 개수를 누적 시킬 수 있습니다.

ck[pos]+=1;         

그럼 이 로직을 완성해 볼까요.

3. 코딩


[전체소스]

#include <iostream>
#include <string.h>

using namespace std;


int main(int argc, char** argv) {
    char ch[100];
    int ck[26];
    int pos;    
    
    cout<<"문장을 하나 입력하시오? ";
    
    cin.getline(ch,100);
    
    for(int i=0;i<26;i++){
        ck[i]=0;
    }
    
    for(int i=0;i<strlen(ch);i++){      
        if(ch[i]>=65 && ch[i]<=90){
            pos=ch[i]-65;           
            ck[pos]+=1;         
        }
        else if(ch[i]>=97 && ch[i]<=122){
            pos=ch[i]-97;       
            ck[pos]+=1;         
        }       
    }
    
    cout<<"[ 알파벳 숫자 세기 ]"<<endl;
    for(int i=0;i<26;i++){
        if(ck[i]!=0) cout<<static_cast<char>(i+65)<<" : "<<ck[i]<<endl;     
    }           
    
    return 0;
}

보시면 쓰여진 알파벳 출력시키고 해당 알파벳을 카운트 한 숫자를 출력합니다. 여기서, 알파벳 출력은 대문자로 하는데 아까 -65을 해서 배열 ck[]는 0~25위치로 알파벳을 지정했기에 원상 복수하려면 다음과 같습니다.

static_cast<char>(i+65)

이렇게 해당 i의 알파벳 위치값에다 65을 더함으로 알파벳을 구할 수 있게 됩니다.

결과가 정상적으로 나온지 볼까요.

[결과]
a1.jpg

보시는 것 처럼 알파벳의 개수를 정상적으로 출력 했네요. 참고로 '!'은 기호입니다. 알파벳 개수를 세는 프로그램이에 이 기호 문자는 무시해야 하겠죠. 그래서 위에서 if문으로 대문자와 소문자인지 체크문을 만들었죠. 알파벳을 제외한 다른 기호는 그냥 무시하고 넘어가도록요.

마무리


지루함을 달래기 위해 C++을 좀 더 이론 글을 써야 하는데 중간의 실습편으로 알파벳 개수 세기를 만들어 보았습니다. 이 코딩을 기준으로 알파벳에 관해 다른 응용을 만들어 보세요.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

Thank you