c++计数数字和字符

C++ count digits and characters

本文关键字:字符 数字 数数 c++      更新时间:2023-10-16

我对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。我做错了什么?如何只计算字符,不包括数字或空格?

您可以使用<cctype>标头中定义的函数,如

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

等来检查特定类型的字符。

symbCounter方法中,您从头到尾读取文件。当您尝试从numbCounter方法中的文件中读取时,对read的调用将返回EOF,因为您位于文件的末尾。你可以通过调用

返回到开头
read.seekg(0);

您需要返回numCounter的文件开头;

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

添加
read.clear();
read.seekg(0, ios::beg);