数据文件处理 - 查找文件中的字数
Data File Handling - find count of word in file
我有这个家庭作业问题:
Write a function in C++ to count the presence of a word 'do' in a text file.
我尝试过的:
我尝试先在文本文件中搜索单词“d”,然后搜索“o”(如果紧接着出现)它。
#include <iostream>
#include <fstream>
using std::fstream;
using std::cout;
using std::ios;
int main()
{
char ch[10];
int count=0, a=0;
fstream f;
f.open("P.txt", ios::in);
while(!fin.eof())
{
fin.get(ch)
if (ch[a]=='d')
{
if ((a++)=='o')
count++;
}
a++;
}
cout << "the no of do's is" << count;
f.close();
}
但是这个想法完全没用。我想不出任何其他想法。我很想在两种情况下得到关于此的 提示:
1.count单词'do'独立存在
2.count 单词 'do' 出现在文本中的任何位置。
这是一个数据文件处理问题。
算法遵循您所拥有的。像这样构造你的 while 循环:
while(!fin.eof()) {
bool found = false;
do {
fin.get(ch);
found = found || ch == 'd';
} while (ch == 'd' && fin);
if (found && ch == 'o') {
// boom goes the dynamite
}
}
do-while
的目的是消除重复的 d
,这样在循环之后,您只需检查下一个字符是否为 o
。
备注
- 在打字方面,
ch
的类型应该是char ch
已解释
while(!fin.eof())
- 重复接下来的几行,直到我们到达文件末尾
do {
do-while
循环的开始
fin.get(ch);
- 从文件中读取单个字节(字符)
found = found || ch == 'd';
- 如果我们已经找到
d
或当前字符是 d
,则将 found
设置为真
} while (ch == 'd' && fin);
do-while
结束。重复循环直到读取的最后一个字符不是 d
或者我们已经到达文件末尾
if (found && ch == 'o') {
- 如果我们能够满足将
found
设置为 true 的条件并且我们读取的最后一个字符是 o
...
// boom goes the dynamite
- 那么我们就成功找到了这个词
do
无 std::ios::eof
接下来我不会对此进行解释,但它会紧跟我已经发布的内容。此处的目标是保护您自己免于读取已经为空的文件。
while(fin >> ch) {
while(ch == 'd' && fin.get(ch)) {
if (ch != 'd') {
if (ch != 'o') {
break;
}
// Found it!
}
}
}
我有这个家庭作业问题:
Write a function in C++ to count the presence of a word 'do' in a text file.
我尝试过的:
我尝试先在文本文件中搜索单词“d”,然后搜索“o”(如果紧接着出现)它。
#include <iostream>
#include <fstream>
using std::fstream;
using std::cout;
using std::ios;
int main()
{
char ch[10];
int count=0, a=0;
fstream f;
f.open("P.txt", ios::in);
while(!fin.eof())
{
fin.get(ch)
if (ch[a]=='d')
{
if ((a++)=='o')
count++;
}
a++;
}
cout << "the no of do's is" << count;
f.close();
}
但是这个想法完全没用。我想不出任何其他想法。我很想在两种情况下得到关于此的 提示:
1.count单词'do'独立存在
2.count 单词 'do' 出现在文本中的任何位置。
这是一个数据文件处理问题。
算法遵循您所拥有的。像这样构造你的 while 循环:
while(!fin.eof()) {
bool found = false;
do {
fin.get(ch);
found = found || ch == 'd';
} while (ch == 'd' && fin);
if (found && ch == 'o') {
// boom goes the dynamite
}
}
do-while
的目的是消除重复的 d
,这样在循环之后,您只需检查下一个字符是否为 o
。
备注
- 在打字方面,
ch
的类型应该是char ch
已解释
while(!fin.eof())
- 重复接下来的几行,直到我们到达文件末尾
do {
do-while
循环的开始
fin.get(ch);
- 从文件中读取单个字节(字符)
found = found || ch == 'd';
- 如果我们已经找到
d
或当前字符是d
,则将
found
设置为真- 如果我们已经找到
} while (ch == 'd' && fin);
do-while
结束。重复循环直到读取的最后一个字符不是d
或者我们已经到达文件末尾
if (found && ch == 'o') {
- 如果我们能够满足将
found
设置为 true 的条件并且我们读取的最后一个字符是o
...
- 如果我们能够满足将
// boom goes the dynamite
- 那么我们就成功找到了这个词
do
- 那么我们就成功找到了这个词
无 std::ios::eof
接下来我不会对此进行解释,但它会紧跟我已经发布的内容。此处的目标是保护您自己免于读取已经为空的文件。
while(fin >> ch) {
while(ch == 'd' && fin.get(ch)) {
if (ch != 'd') {
if (ch != 'o') {
break;
}
// Found it!
}
}
}