我对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的值。我做错了什么?我如何计算字符,不包括数字或空格?提前谢谢。
答案 0 :(得分:3)
您可以使用<cctype>
标题中定义的函数,如
isalpha()
isblank()
iscntrl()
isdigit()
isspace()
和其他人检查特定类型的字符。 例如,请参阅this。
答案 1 :(得分:1)
在symbCounter
方法中,您将文件读到最后。当您尝试使用numbCounter
方法读取文件时,对read
的调用将返回EOF
,因为您位于文件的末尾。您可以通过致电
read.seekg(0);
答案 2 :(得分:0)
您需要返回numCounter文件的开头; 在
之后int numbCounter(int &n, ifstream &read, int counter) {
添加
read.clear();
read.seekg(0, ios::beg);