C ++ - 用于计算没有ifstream的单词出现次数的程序

时间:2015-04-27 18:04:21

标签: c++ string count ifstream word

我有一个代码,程序将从用户读取一个单词,然后在文本文件“my_data.txt”中计算它的总出现次数。但我不想使用ifstream函数。我已经有了一个像“天空是蓝色的”文字。

我希望程序能够从中读取。我知道我可以创建一个字符串并添加文本但是如何计算出现次数呢?

到目前为止,这是我的代码:

    #include<iostream.h>
#include<fstream.h>
#include<string.h>

int main()
{
 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;

}

1 个答案:

答案 0 :(得分:3)

不使用ifstream,您有以下选择:cinpiping;或fscanf我真的不明白你为什么不想使用ifstream

cin和管道

您可以使用cin流并让操作系统将数据文件路由到您的程序。

你循环看起来像这样:

std::string word;
while (cin >> word)
{
  // process the word
}

使用命令行的示例调用是:

my_program.exe < my_data.txt

此调用告诉操作系统将标准输入重定向到从文件my_data.txt读取的驱动程序。

使用fscanf

fscanf来自C背景,可用于从文件中读取。为单词开发正确的格式说明符可能会非常棘手。但它不是std::ifstream

此外,fscanf无法安全使用std::string,而std::ifstream可以安全使用std::string

编辑1:字符串中的单词

由于您的问题存在一些歧义,因此一种解释是您希望从一串文本中计算单词。

让我们说你有这样的声明:
const std::string sentence = "I'm hungry, feed me now.";

您可以使用std::istringstream并计算单词:

std::string word;
std::istringstream sentence_stream(sentence);
unsigned int word_count = 0U;
while (sentence_stream >> word)
{
  ++word_count;
}