簡體   English   中英

如何用另一個文本替換字符串的特定部分?

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

我在這里解決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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM