【白俊】10820号:文字列解析
2332 ワード
https://www.acmicpc.net/problem/10820
それぞれ比較によって文字を区別する.
Nが入力されていないため、eofを使用して終了条件を受け入れる必要があります.
理由は.
最後の行を読み終わったら、最後の行の後ろの改行だけを読み出し、getlineは終了するので、eofかどうかは不明です.そのため、ループはもう一度回転します.
休憩に注意する
終了条件で問題あり!!
checking for eof in string::getline
質問する
アルゴリズムアクセスメソッド
それぞれ比較によって文字を区別する.
Nが入力されていないため、eofを使用して終了条件を受け入れる必要があります.
まちがった答え
while (!cin.eof())
{
getline(cin, s)
...
}
最初はそうしたけどだめだった理由は.
最後の行を読み終わったら、最後の行の後ろの改行だけを読み出し、getlineは終了するので、eofかどうかは不明です.そのため、ループはもう一度回転します.
正解
while (getline(cin, s))
{
...
}
読むためにやってみて、ダメなら終わってしまうので、ちょうど良い回転.に答える
#include <iostream>
#include <string>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string S;
while (getline(cin, S))
{
int num[4] = {0, }; // 소문자, 대문자, 숫자, 공백의 개수
for (int j=0; j<S.length(); j++){
char c = S[j];
// 소문자 ?
if (c >= 'a' && c <= 'z')
num[0]++;
// 대문자 ?
else if (c >= 'A' && c <= 'Z')
num[1]++;
// 숫자 ?
else if (c >= '0' && c <= '9')
num[2]++;
//공백 ?
else if (c == ' ')
num[3]++;
}
for (int j=0; j<4; j++){
cout << num[j] << ' ';
}
cout << '\n';
}
return 0;
}
整理する
休憩に注意する
💡 注意:配置
終了条件で問題あり!!
checking for eof in string::getline
Reference
この問題について(【白俊】10820号:文字列解析), 我々は、より多くの情報をここで見つけました https://velog.io/@youhyeoneee/백준テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol