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 回答