簡體   English   中英

使用 C++ 將一個字符串替換為另一個字符串

[英]Replace a string to another string using C++

問題是我不知道輸入字符串的長度。 我的 function 只能在輸入字符串為“yyyy”時替換。 我想的解決方案是,首先,我們將嘗試將輸入字符串轉換回“yyyy”並使用我的 function 來完成工作。

這是我的 function:

void findAndReplaceAll(std::string & data, std::string toSearch, std::string replaceStr)
{
    // Get the first occurrence
    size_t pos = data.find(toSearch);

    // Repeat till end is reached
    while( pos != std::string::npos)
    {
        // Replace this occurrence of Sub String
        data.replace(pos, toSearch.size(), replaceStr);
        // Get the next occurrence from the current position
        pos = data.find(toSearch, pos + replaceStr.size());
    }
}

我的主function

std::string format = "yyyyyyyyyydddd";
findAndReplaceAll(format, "yyyy", "%Y");
findAndReplaceAll(format, "dd", "%d");

我預期的 output 應該是:

%Y%d

使用正則表達式。

例子:

#include <iostream>
#include <string>
#include <regex>
int main(){
    std::string text = "yyyyyy";
    std::string sentence = "This is a yyyyyyyyyyyy.";
    std::cout << "Text: " << text << std::endl;
    std::cout << "Sentence: " << sentence << std::endl;

    // Regex
    std::regex y_re("y+"); // this is the regex that matches y yyy or more yyyy

    // replacing
    std::string r1 = std::regex_replace(text, y_re, "%y"); // using lowercase
    std::string r2 = std::regex_replace(sentence, y_re, "%Y"); // using upercase 

    // showing result
    std::cout << "Text replace: " <<   r1 << std::endl;
    std::cout <<  "Sentence replace: " << r2 << std::endl;
    return 0;
}

Output:

Text: yyyyyy
Sentence: This is a yyyyyyyyyyyy.
Text replace: %y
Sentence replace: This is a %Y.

如果你想讓它變得更好,你可以使用:

// Regex
std::regex y_re("[yY]+");

這將匹配任何數量的“Y”的小寫和大寫的任何組合。 使用該正則表達式的示例 output:

Sentence: This is a yYyyyYYYYyyy.
Sentence replace: This is a %Y.

這只是一個簡單的例子,說明你可以用正則表達式做什么,我建議你看一下這個話題,在 SO 和其他網站上有很多她的信息。

額外:如果您想在替換之前進行匹配以替代替換,您可以執行以下操作:

 // Regex
    std::string text = "yyaaaa";
    std::cout << "Text: " << text << std::endl;
    std::regex y_re("y+"); // this is the regex that matches y yyy or more yyyy


    std::string output = "";
    std::smatch ymatches;
    if (std::regex_search(text, ymatches, y_re)) {
        if (ymatches[0].length() == 2 ) {
            output = std::regex_replace(text, y_re, "%y");
        } else {
            output = std::regex_replace(text, y_re, "%Y");
        }
    }

暫無
暫無

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

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