C++ 替换文本文件中的元音

C++ 替换文本文件中的元音,c++,C++,在我的程序中,我想创建的函数之一是获取一个输入文件,并用“3”替换每个元音。我做了一些事情,但显然不起作用。我希望能得到一些帮助: void replace元音(ifstream&dataIn,string outputFile) { 弦线; 流数据输出; 打开(outputFile.c_str()); 而(!dataIn.eof()) { getline(数据输入,行); 对于(int i=0;i

在我的程序中,我想创建的函数之一是获取一个输入文件,并用“3”替换每个元音。我做了一些事情,但显然不起作用。我希望能得到一些帮助:

void replace元音(ifstream&dataIn,string outputFile)
{
弦线;
流数据输出;
打开(outputFile.c_str());
而(!dataIn.eof())
{
getline(数据输入,行);
对于(int i=0;idataOut您的程序有几个问题


首先,您的布尔逻辑有问题。您有以下问题:

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())
不应该这样做


第三,您可以使用以下方法编写该函数的大部分内容:

#包括
#包括
//...
void replace元音(ifstream&dataIn,string outputFile)
{
弦线;
静态常量字符*元音=“aaeeiiouu”;
流数据输出;
打开(outputFile.c_str());
while(getline(数据输入,行))
{
std::如果(line.begin(),line.end(),则替换_,
[&](char ch){return strchr(元音,ch);},'3');

dataOut您的程序有几个问题


首先,您的布尔逻辑有问题。您有以下问题:

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())
不应该这样做


第三,您可以使用以下方法编写该函数的大部分内容:

#包括
#包括
//...
void replace元音(ifstream&dataIn,string outputFile)
{
弦线;
静态常量字符*元音=“aaeeiiouu”;
流数据输出;
打开(outputFile.c_str());
while(getline(数据输入,行))
{
std::如果(line.begin(),line.end(),则替换_,
[&](char ch){return strchr(元音,ch);},'3');

数据输出这是一个使用
std::replace|u if
的单线解决方案。那么您准备好了吗?if(line.at(i)!=“a”| line.at(i)!=“e”| line.at(i)!=“i”| line.at(i)!=“o”| line.at(i)!=“u”)THT总是这样的。顺便说一下,你应该考虑改变字母,也可以让它检查大写字母元音:<代码>(STD:(Tou.At',(i))=“a”)或“代码>或相反的方式:<代码> STD::ToLoW< /Cord>。在(i)!=(i)=‘i’字行。AT(i)=‘o’*线。AT(i)=‘u’)顺便说一下,Trt始终是真的。你应该考虑改变π,也可以让它检查大写字母元音:<代码>(STD:(Toup:Tou.At(i))=‘a’)< /代码>或相反的方式:<代码> STD::ToLoWi。