替换文本文件中的元音

时间:2019-04-03 23:02:58

标签: c++

在我的程序中,我要创建的功能之一是获取一个输入文件,并将每个元音都替换为“ 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(); };

1 个答案:

答案 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;
    }
};
相关问题