【白俊】10820号:文字列解析


https://www.acmicpc.net/problem/10820

質問する



アルゴリズムアクセスメソッド


それぞれ比較によって文字を区別する.
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