我试图创建一个函数how_many(),它计算某种类型的字符数,比如" \ n"或",",在文件流中。这是我的(失败)尝试:
int how_many(char mychar, anifstream myfile){
int result;
while(!myfile.eof())
{
if(myfile.get()==mychar){result=result+1;}
}
myfile.close(); // Closes the filestream "my file"
return result;
}
第一个问题:是" \ n"一个字符或一个字符串? (如果是这样,那么我应该让第一个输入成为字符串而不是字符)
第二个问题:你能解释一下错误信息吗? (或者,直接指出我的代码中滥用语法):
warning: result of comparison against a string literal is unspecified
(use strncmp instead) [-Wstring-compare]
note: candidate function not viable: no known conversion from 'const char [2]' to
'char' for 1st argument
答案 0 :(得分:1)
"\n"
是一个字符串文字,其类型为const char[2]
,包含两个字符:'\n'
和'\0'
。
'\n'
- 是一个类型为char
的转义字符文字。
考虑到函数中的变量result
未初始化。
答案 1 :(得分:0)
'\n'
是一个字符,而"\n"
是一个字符串文字(类型为const char[2]
,最后一个为null)
用于计算偏好算法
#include <algorithm>
#include <iterator>
//..
std::size_t result = std::count( std::istream_iterator<char>(myfile),
std::istream_iterator<char>(),
mychar
) ;
答案 2 :(得分:0)
在阅读文件时,您可能想要制作直方图:
std::vector<char> character_counts(256); // Assuming ASCII characters
// ...
char c;
while (cin >> c) // The proper way to read in a character and check for eof
{
character_counts[c]++; // Increment the number of occurances of the character.
}
在您发布的情况下,您可以找到&#39; \ n&#39;由:
cout << "Number of \'\\n\' is: " << character_counts['\n'] << endl;