Чтение из файла и замена определенного символа в C ++ - PullRequest
2 голосов
/ 13 декабря 2011

В этой функции мне нужно заменить все символы в вводимом файле, например, 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;
}
}

Ответы [ 3 ]

4 голосов
/ 13 декабря 2011

Посмотрите внимательно на этот код:

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» и «b» в двух переменных.Но если вы нажмете «a enter b enter», он будет читать «a» и ввод двух переменных!

2 голосов
/ 13 декабря 2011

Один из способов сделать это - прочитать исходный файл, заменить символы и записать вывод в новый файл.

Затем, когда вы закончите, возможно, перезапишите старый файл новым.

2 голосов
/ 13 декабря 2011

Я бы начал с относительно простого решения:

  1. сохраните содержимое файла в vector<char> (обратите внимание на большие файлы)
  2. просмотрите содержимоевектор и сделать своп
  3. перезаписать старый файл с содержимым вектора
...