替换字符会增加一个字符

时间:2014-12-19 21:09:11

标签: c++

我正在尝试将文字文件中的字符badSymbols替换为goodSymbols,但它会为我的替换字符添加一个字符。例如,当我将'æ'替换为'c'时,我得到'Ãc'

这个简单的程序逐行读取文本文件并替换字符,然后将其写入“fileout.txt”

int main()
{
    char buffer, c;
    string line, filepath;
    fstream filein, fileout;
    char badSymbols[] = {'', 'ê', '³', 'æ', '', '¹', '¿', '£', '', '³', ''};
    char goodSymbols[] = {'s', 'e', 'l', 'c', 'z', 'a', 'z', 'L', 's', 'l', ''};
    string symbol;
    size_t found;
    cout << "Podaj sciezke pliku, w którym zamienic znaki" << endl;
    cin >> filepath;
    filepath = filepath + ".txt";
    filein.open("/home/damian/jezykc++/untitled2/gared.txt", ios:: in );
    fileout.open("/home/damian/jezykc++/untitled2/fileout.txt", ios::trunc | ios::out);
    if (filein.good() == true)
    {
        std::cout << "Uzyskano dostep do pliku!" << std::endl;
        while (getline(filein, line))
        {
            // buffer=line;
            //getline(filein,line);
            for (int i = 0; i < sizeof(badSymbols); i++)
            {
                symbol = goodSymbols[i];
                found = line.find(badSymbols[i]);
                if (found != std::string::npos)
                    line.replace(found, 1, symbol);
            }
            cout << line << endl;
            fileout << line << endl;
        }
    }
    else std::cout << "Dostep do pliku zostal zabroniony!" << std::endl;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

你可以在while中使用file.get()而不是getline()。我认为如果只获得一个角色并将其与“坏角色”进行比较会更好。换句话说,使用strcmp()转换代码中的字符!