gpt4 book ai didi

c++ - 为什么这不会更改 .txt 文件?

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:54 24 4
gpt4 key购买 nike

我正在尝试编辑一个文本文件以从中删除元音,但由于某种原因文本文件没有任何反应。我认为这可能是因为需要在文件流中传递模式参数。

[已解决]

代码:

#include "std_lib_facilities.h"

bool isvowel(char s)
{
return (s == 'a' || s == 'e' || s =='i' || s == 'o' || s == 'u';)
}


void vowel_removal(string& s)
{
for(int i = 0; i < s.length(); ++i)
if(isvowel(s[i]))
s[i] = ' ';
}

int main()
{
vector<string>wordhold;
cout << "Enter file name.\n";
string filename;
cin >> filename;
ifstream f(filename.c_str());

string word;
while(f>>word) wordhold.push_back(word);

f.close();

ofstream out(filename.c_str(), ios::out);
for(int i = 0; i < wordhold.size(); ++i){
vowel_removal(wordhold[i]);
out << wordhold[i] << " ";}


keep_window_open();
}

最佳答案

在同一流上读取和写入会导致错误。检查f.bad()f.eof()循环终止后。恐怕你有两个选择:

  1. 读写不同的文件
  2. 将整个文件读入内存,关闭,覆盖原来的

作为Anders说明,您可能不想使用 operator<<为此,因为它会用空格打破一切。你可能想要 std::getline() 啜饮线条。将它们拉入 std::vector<std::string> ,关闭文件,编辑 vector ,覆盖文件。

编辑:

Anders他的描述是对的。将文件视为字节流。如果您想就地转换文件,请尝试如下操作:

void
remove_vowel(char& ch) {
if (ch=='a' || ch=='e' || ch=='i' || ch =='o' || ch=='u') {
ch = ' ';
}
}

int
main() {
char const delim = '\n';
std::fstream::streampos start_of_line;
std::string buf;
std::fstream fs("file.txt");

start_of_line = fs.tellg();
while (std::getline(fs, buf, delim)) {
std::for_each(buf.begin(), buf.end(), &remove_vowel);
fs.seekg(start_of_line); // go back to the start and...
fs << buf << delim; // overwrite the line, then ...
start_of_line = fs.tellg(); // grab the next line start
}
return 0;
}

这段代码有一些小问题,比如它不适用于 MS-DOS 风格的文本文件,但如果必须的话,您或许可以弄清楚如何解决这个问题。

关于c++ - 为什么这不会更改 .txt 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1191349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com