#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
ifstream inf(argv[1]);
if (!inf)
{
cerr << "Error opening " << argv[1] << endl;
return 1;
}
char ch;
size_t count = 0;
string vowels = "aAeEiIoOuU";
size_t p;
p = vowels.find(ch);
inf >> ch;
while(!inf.eof())
{
if (p != string::npos)
{
count++;
}
inf >> ch;
}
inf.close();
cout << "File " << argv[1] << " includes " << count << " vowels." << endl;
return 0;
}
我的部分有问题
inf >> ch;
while(!inf.eof())
{
if ( p != string::npos)
{
count++
}
inf >> ch;
}
基本上,程序会查找text.txt文件并计算它有多少个元音。 我想在while循环中重复一遍。如果我包含“inf&gt;&gt; ch;”在while循环结束时,程序将元音计为错误。如果我不这样做,程序会在运行时冻结。你能帮我么?谢谢。
提示:
我必须使用
string vowels =“aAeEiIoOuU”;
如果ch是一个元音,函数调用vowels.find(ch)将返回一个不是string :: npos的索引。
答案 0 :(得分:2)
问题是你在循环之外调用find
,所以可能的修复是:
string vowels = "aAeEiIoOuU";
// p delcaration and call to find is removed from here
inf >> ch;
while(!inf.eof())
{
size_t p = vowels.find(ch);
if (p != string::npos)
{
count++;
}
inf >> ch;
}
但是为了避免代码重复,这更好更清洁:
while( inf >> ch )
{
size_t p = vowels.find(ch);
if (p != string::npos)
{
count++;
}
}
答案 1 :(得分:0)