在文本文件

时间:2017-01-25 09:53:48

标签: c++

以下是我在此处http://www.thecrazyprogrammer.com/2015/02/c-program-count-occurrence-word-text-file.html的代码。 (c ++中的新内容)

#include <iostream>
#include <fstream>
#include<cstring>
using namespace std;


int main()
{
  // std::cout << "Hello World!" << std::endl;
 // return 0;

 ifstream fin("my_data.txt"); //opening text file
 int count=0;
 char ch[20],c[20];

 cout<<"Enter a word to count:";
 gets(c);

 while(fin)
 {
  fin>>ch;
  if(strcmp(ch,c)==0)
   count++;
 } 

 cout<<"Occurrence="<<count<<"n";
 fin.close(); //closing file

 return 0;

}

模式计数错误

my_data.txt中只有3个“世界”,但是当我运行程序时,它会导致

enter image description here

这是文本文件的内容

enter image description here 可能出现什么问题?

2 个答案:

答案 0 :(得分:2)

使用std :: string

的解决方案
int count = 0;
std::string word_to_find, word_inside_file;

std::ifstream fin("my_data.txt");
std::cout << "Enter a word to count:";
std::cin >> word_to_find;
while (fin >> word_inside_file) {
    if (word_to_find == word_inside_file )
        count++;
}

std::cout << "Occurrence=" << count << "";

如果你想在其他字符串中找到所有出现的内容,如评论中所述,你可以这样做:

...
while (fin >> word_inside_file) {
    count += findAllOccurrences(word_to_find, word_inside_file);
}
...

findAllOccurrences(std::string, std::string)内,您将实现&#34;在另一个字符串中找到所有字符串出现&#34;算法。

答案 1 :(得分:0)

如果你是c ++的新手,你就不应该使用获取。阅读&#34;缓冲区溢出漏洞&#34;。 gets()更像是c风格。你应该考虑使用std :: cin。