我有一个代码,程序将从用户读取一个单词,然后在文本文件“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;
}
答案 0 :(得分:3)
不使用ifstream
,您有以下选择:cin
和piping
;或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
。
由于您的问题存在一些歧义,因此一种解释是您希望从一串文本中计算单词。
让我们说你有这样的声明:
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;
}