

プログラミング初心者です。入力がcharの配列の場合において、cstringを含む文字列に含まれるアルファベットの数をisalpha関数とfor
loopを用いて表示しようとしたので全くうまくできませんでした。  
どなたかご教示頂けますと幸いです。（他の方法ではなく、isalpha関数を用いた方法をご教示頂けますと幸いです。）

[code]

    #include <iostream>
    #include <cctype>
    using namespace std;
    
    int main()
    {
        int counter = 0;
        int i;
        const int SIZE = 100;
        char input [SIZE];
        cout << "Please Enter String:" << endl;
        cin.getline(input, SIZE);
        for(i = 0; i< SIZE; i++)
        {
            if(isalpha(input[i]))
            {
                counter++;
            }
    
        }
        cout << "the number of elements in the array that contain the alphabetic character is:" << input << endl;
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2018-03-01T18:18:54.627
42082
2018-03-01T22:19:41.483
2018-03-01T21:46:50.090
4236
26303
question
c++
c++でisalpha関数を用いてcharの配列の中に含まれるアルファベットの数を表示する


forループで、初期化されていないinput[i]をisalpha()に渡しているのと、std::coutに渡しているのがinputなのが原因だと思います。  
修正例：

[code]

    #include <iostream>
    #include <cctype>
    
    int main()
    {
        int counter = 0;
        const int SIZE = 100;
        char input[SIZE];
        std::cout << "Please Enter String:\n";
        std::cin.getline(input, SIZE);
        for (int i = 0; input[i] != '\0'; ++i)  // 文字列の終わりまで
        {
            if (isalpha(input[i]))
            {
                counter++;
            }
        }
        std::cout << "the number of elements in the array that contain the alphabetic character is:" << counter << "\n";
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2018-03-01T19:05:08.457
42083
2018-03-01T21:57:03.387
2018-03-01T21:57:03.387
27584
27584
42082
answer


回答としてはsokamuさんが指摘されているように`for`ループの終了条件が誤っています。それ以外の部分についてコメントします。プログラミング初心者とのことですのでいきなりここまで書ける必要はありませんが、一歩ずつ勉強していただけたらと思います。

変数は使う場所で宣言すべきです。C++言語ではコンストラクター・デストラクターが存在するため、変数宣言を関数の先頭に集めるべきではありません。ちなみにC言語ですら関数の先頭に集める必要はなく、なにか別の言語での制約がいつの間にかC言語やC++言語の作法・様式美として根付いてしまっています。  
特に今回であればループカウンター`i`は`for`内で宣言するのが適切です。

[`std::size`](https://cpprefjp.github.io/reference/iterator/size.html)を使うと配列の大きさを取得できます。ですので`const
int SIZE = 100;`は不要で`size(input)`とした方がいいでしょう。  
もちろん[`std::string`](https://cpprefjp.github.io/reference/string.html)を使用した方がバッファサイズや文字列の長さ上限などを適切に扱ってくれるため楽で安全になります。

[`std::count_if`](https://cpprefjp.github.io/reference/algorithm/count_if.html)を使うと条件を満たした要素のカウントをしてくれるため`for`ループを記述する必要がなくなります。条件の部分も「要素を受け取り真偽を返す関数」ですので`isalpha`そのものです。つまり

[code]

    // char input[100];の場合
    auto count = count_if(begin(input), begin(input) + strlen(input), isaplha);
    // string input;の場合
    auto count = count_if(begin(input), end(input), isaplha);
    
[/code]

と書けます。

以上を総合すると

[code]

    #include <algorithm>
    #include <iostream>
    #include <cctype>
    #include <string>
    using namespace std;
    
    int main()
    {
        cout << "Please Enter String:" << endl;
        string input;
        getline(cin, input);
        auto count = count_if(begin(input), end(input), isalpha);
        cout << "the number of elements in the array that contain the alphabetic character is:" << count << endl;
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2018-03-01T22:19:41.483
42084
2018-03-01T22:19:41.483
4236
42082
answer