计算文件流中的字符数

时间:2014-06-08 17:39:23

标签: c++

我试图创建一个函数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

3 个答案:

答案 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;