지난 시간에 문장을 입력 받아 알파벳을 개수를 세는 실습을 하였습니다. 문장을 입력 받을 때 사용했던 getline()함수를 사용했는데 오늘은 이 표현 코딩을 좀 다르게 하여 동일한 결과를 얻는 실습을 하고자 합니다.
알파벳 문장을 입력 받을 때 지난 시간에 표현은 다음과 같습니다.
char ch[100];
cin.getline(ch,100);
이렇게 배열로 표현했을 때는 읽은 문장의 크기를 위 코딩처럼 지정해 줘야 합니다. 고정 된 크기로 읽는 것이죠.
하지만 아래와 같이 문장을 저장하는 공간을 string으로 표현 한다면 다음과 같이 코딩 할 수 있습니다.
string str;
getline(cin,str);
이렇게 2개의 인자가 있는데 cin 입력을 받는데 str 문자열변수로 읽어온다는 의미입니다. 이렇게 표현하면 고정 된 크기를 변수를 선언 할 때 할 필요가 없고 getline()함수에서도 읽을 크기를 지정 할 필요가 없습니다.
이게 정상적으로 문장의 쓰여진 알파벳의 개수를 셀 수 있는지 볼까요.
[전체소스]
#include
#include
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
string str;
int ck[26];
int pos;
cout<<"문장을 하나 입력하시오? ";
getline(cin,str); //cin.getline(ch,100); => char ch[100];
for(int i=0;i<26;i++){
ck[i]=0;
}
for(int i=0;i<str.length();i++){
if(str[i]>=65 && str[i]<=90){
pos=str[i]-65;
ck[pos]+=1;
}
else if(str[i]>=97 && str[i]<=122){
pos=str[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;
}
위 코딩은 [C++ 언어-기초실습-2] 알파벳 개수 세기 post에서 실습한 코딩에서 문장을 저장하는 변수형태만 바꾼 소스입니다.
그리고 변경된 부분은 입력 받은 문자열의 크기를 추출하는 함수가 달라졌습니다.
strlen(ch);
배열 ch[] 변수에 읽어 온 문장의 길이 값을 계산하여 반환합니다. string 변수의 경우는 위의 전체소스에 나온 형태로 length() 함수로 읽어 온 문장의 길이값을 계산하여 반환합니다.
str.length();
아무튼 두개의 함수는 배열 변수이든 문자열 변수이든 두가지 형태에서 저장된 문장의 길이를 계산 할 수 있다는 것만 알아 두시면 됩니다.
[결과]
오늘은 문장을 입력 받았을 때 배열 변수에 저장했는데 다른 형태로 string 클래스 객체변수에 저장하는 방식을 소개 합니다. 코딩은 이처럼 어떤 특정한 한나의 형태로 코딩을 하지 않습니다. 동일한 결과를 얻더라도 코딩을 하는 사람들의 스타일에 따라 다양한 형태로 코딩을 할 수 있습니다. 그 예를 보여 주기 위해서 지난 시간에 다룬 내용을 연장해서 오늘 post 주제로 결정 했네요. 이 표현 말고 다른 표현도 있습니다. 한번 그건 여러분들이 찾아보시거나 상상해보세요.