从文件中读取并交换c++中的特定字符

Read from a file and swap certain char in C++

本文关键字:c++ 字符 交换 文件 读取      更新时间:2023-10-16

在这个函数中,我需要将输入的文件中的所有字符(例如a)替换为输入的另一个字符(例如i)。我已经试过两次了,但作为新人,我的大脑已经太迟了,没有什么建议了吗?

void swapping_letter()
{
ifstream inFile("decrypted.txt");   
char a;
char b;
string line;
if (inFile.is_open())
{
    while (!inFile.eof())
    {
        getline(inFile,line);
    }
    cout<<"What is the letter you want to replace?"<<endl;
    cin>>a;             
    cout<<"What is the letter you want to replace it with?"<<endl;
    cin>>b;
    replace(line.begin(),line.end(),a,b);

            inFile<<line

    inFile.close();
}
else
{
    cout<<"Please run the decrypt."<<endl;
}
}

或:

void swapping_letter()
{
ifstream inFile("decrypted.txt");   
char a;
char b;
if (inFile.is_open())
{
    const char EOL = 'n';                                          
    const char SPACE = ' ';
    cout<<"What is the letter you want to replace?"<<endl;
    cin>>a;             
    cout<<"What is the letter you want to replace it with?"<<endl;
    cin>>b;
    vector<char> fileChars;                                     
    while (inFile.good())                                            
    {
        char c;
        inFile.get(c);
        if (c != EOL && c != SPACE)                             
        {
            fileChars.push_back(c);
        }

        replace(fileChars.begin(),fileChars.end(),a,b);
        for(int i = 0; i < fileChars.size(); i++)
        {
            inFile<<fileChars[i];
        }
    }
}
else
{
    cout<<"Please run the decrypt."<<endl;
}
}

仔细看下面的代码:

cout<<"What is the letter you want to replace?"<<endl;
cin>>a;             
cout<<"What is the letter you want to replace it with?"<<endl;
cin>>b;

它读取两个字符,不多也不少。如果你按下"ab enter",你就没事了,回车将是未读的,但这不会造成任何伤害——它会将"a"answers"b"读入两个变量中。但是如果你按"a enter b enter",它会读取"a"answers"enter"到两个变量中!

这样做的一种方法是读取原始文件,替换字符并将输出写入新文件。

最后,当你完成后,可能会用新的文件覆盖旧文件。

我将从一个相对简单的解决方案开始:

  1. 将文件的内容存储在vector<char>中(注意大文件)
  2. 遍历vector的内容并执行swap
  3. 用矢量
  4. 的内容覆盖旧文件