c++ fstream 在文件中更改 space

c++ fstream changing space in file

我想将我的文件 "ok.txt" 每 2 space 更改为一个。 那是我的代码。

fstream file1("ok.txt",ios::in|ios::out);

    if (file1.is_open())
    {
        cout << Acces allowed" << endl;

        string c;
        getline(file1, c);

        for (int i = 0; i < c.length(); i++)
        {
            if (c[i] == '  ')
                c[i] = ' ';
        }

        file1 << c;

    }
    else
    {
        cout << "Error";
    }
    file1.close();

替换它:

    for (int i = 0; i < c.length(); i++)
    {
        if (c[i] == '  ')
            c[i] = ' ';
    }

与:

string singleSpace=" ";
string doubleSpace="  ";
int position = c.find( doubleSpace ); 
while ( position != string::npos ) 
{
  c.replace( position, doubleSpace.length(), singleSpace );
  position = c.find(doubleSpace, position + 1 );
} 

请注意,double space 是一个字符串,而不是单个字符。

您可以使用类似这样的替换算法:

std::string s = "bla  bla  bla";
std::string onespace = " ";
std::string doublespace = "  ";

size_t start_pos = 0;
while(( start_pos = s.find(doublespace, start_pos)) != std::string::npos) {
     s.replace(start_pos, doublespace.length(), onespace);
     start_pos += onespace.length();
}

这将在 bla bla bla

中转换 s