在我的程序中,我要创建的功能之一是获取一个输入文件,并将每个元音都替换为“ 3”。我做了一些事情,但是显然没有用。我希望可以得到一些帮助:
void replaceVowels(ifstream &dataIn, string outputFile)
{
string line;
ofstream dataOut;
dataOut.open(outputFile.c_str());
while(!dataIn.eof())
{
getline(dataIn, line);
for (int i = 0; i < line.length(); i++)
{
if(line.at(i) != 'a' || line.at(i) != 'e' || line.at(i) != 'i' || line.at(i) != 'o' || line.at(i) != 'u')
{
dataOut << line.at(i);
} else {
line.at(i) = '3';
dataOut << line.at(i);
}
dataOut << endl;
}
}
dataOut.close();
};
答案 0 :(得分:2)
您的程序有几个问题。
首先,您的布尔逻辑错误。你有这个:
if(line.at(i) != 'a' || line.at(i) != 'e' || line.at(i) != 'i'
|| line.at(i) != 'o' || line.at(i) != 'u')
应满足以下条件:
if(line.at(i) != 'a' && line.at(i) != 'e' && line.at(i) != 'i'
&& line.at(i) != 'o' && line.at(i) != 'u')
不过,我们可以使用strchr
进行简单的搜索来使代码“更整洁”:
static const char *vowels="aAeEiIoOuU"
//...
bool isVowel = strchr(vowels, line.at(i)); // true if vowel, false otherwise
第二,这句话:
while(!dataIn.eof())
不应该这样做。 Please read this for more information.
第三,您可以使用std::replace_if来编写大部分功能:
#include <cstring>
#include <algorithm>
//...
void replaceVowels(ifstream &dataIn, string outputFile)
{
string line;
static const char *vowels = "aAeEiIoOuU";
ofstream dataOut;
dataOut.open(outputFile.c_str());
while(getline(dataIn, line))
{
std::replace_if(line.begin(), line.end(),
[&](char ch) { return strchr(vowels, ch); }, '3');
dataOut << line << endl;
}
};