如何将字符串的特定部分替换为另一个文本

How to replace specific part of a string with another text?

本文关键字:替换 另一个 文本 定部 字符串      更新时间:2023-10-16

我正在解决Reddit上的挑战

而且我找不到如何用另一个字符串替换字符串的特定文本。我设法找出如何检查该特定文本是否存在,但是我在用另一个文本替换它或将其从字符串中完全删除时遇到了问题(因为挑战需要这样做)。

这是我到目前为止的代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int law (string a);
int main() {
    string a;
    cin >> a;
    cout << law(a) << endl;
    return 0;
}
int law(string a){
    if (a.find("NOT") != string::npos)
        return a.replace(a.begin(), a.end(), ' ');
    if(a.find("NOT") != string::npos && ((a.find("AND") == string::npos) || (a.find("OR") == string::npos)))
       return a.erase(remove(a.begin(), a.end(), "NOT"), a.end());
}

您可以搜索子字符串位置,然后将 的每个字符分配给原始字符串:

void replace( std::string& input_string , const std::string& searched_string , const std::string& replace_string )
{
    std::size_t replace_pos = input_string.find( searched_string );
    if( replace_pos != std::string::npos )
    {
        std::copy( std::begin( replace_string ) ,
                   std::end( replace_string ) ,
                   std::begin( input_string ) + replace_pos
                 );
        //Or with a simple for loop (Which is what std::copy does):
        for( std::size_t i = 0 ; i < replace_string.size() ; ++i )
            input_string[i + replace_pos}] = replace_string[i];
    }
}

此解决方案的要点是,根本没有理由使用昂贵的字符串连接来替换文本

考虑包含三个部分的结果字符串:

  • 原始字符串的开头部分
  • 替换文本
  • 原始字符串的结尾部分

您可以使用 string.substr() 获取原始字符串的开头和结尾部分。 代码将如下所示:

string originalString; // given
string partToReplace; // given
string replacementText; // given
int positionOfText = originalString.find(partToReplace);
string resultString = originalString.substr(0, positionOfText);
resultString += replacementText;
resultString += originalString.substr(positionOfText + partToReplace.length());