0

私はC ++を初めて使用し、桁数、文字、スペース記号、およびその他の記号をカウントできるプログラムを作成する必要があります。桁数を数えることから始めることにしました。これまでの私のコードは次のとおりです。

 int main() {
     int n = 0;
     int numb = 0;

     ifstream read("Data.txt");

     n = symbCounter(n, read);
     numb = numbCounter(n, read, numb);
     cout << numb; // this is for quick testing

     return 0;
 }

 int symbCounter(int &n, ifstream &read) {

     char ch;
     while (!read.eof()) {
         read.get(ch);
         n++;

     }
     return n;

 }

 int numbCounter(int &n, ifstream &read, int counter) {

     char sk[n];

     for (int i = 0; i < n; i++) {
         read.get(sk[i]);
         if (sk[i] == '1' || sk[i] == '2' || sk[i] == '3' || sk[i] == '4' || sk[i] == '5' || sk[i] == '6' || sk[i] == '7' || sk[i] == '8' || sk[i] == '9' || sk[i] == '0')
             counter++;
     };

     return counter;
 }

しかし、コンソールには値 0 が表示されます。何が間違っているのでしょうか? また、数字やスペースを除いて、文字だけを数えるにはどうすればよいですか? 前もって感謝します。

4

3 に答える 3

3

<cctype>次のようにヘッダーで定義された関数を使用できます

isalpha()
isblank()
iscntrl()
isdigit()
isspace()

など、特定の種類の文字をチェックします。たとえば、これを参照してください。

于 2013-03-28T15:13:53.307 に答える
1

あなたのsymbCounter方法では、ファイルを最後まで読みます。メソッドでファイルから読み取ろうとすると、ファイルの最後にいるため、numbCounterへの呼び出しreadが返されます。EOFを呼び出すと、最初に戻ることができます

read.seekg(0);
于 2013-03-28T15:19:14.050 に答える
0

numCounter のファイルの先頭を返す必要があります。直後の

int numbCounter(int &n, ifstream &read, int counter) {

追加

read.clear();
read.seekg(0, ios::beg);
于 2013-03-28T16:06:33.290 に答える