簡體   English   中英

C ++正則表達式-替換char中的子字符串

[英]C++ regex - replacing substring in char

我編寫了以下函數來替換char中的子字符串。 這種方法涉及轉換為std :: string,然后轉換回const char。 這是最有效的方法嗎?如果沒有這種轉換甚至更好的方法,我可以這樣做嗎?

    const char* replaceInString(const char* find, const char* str, const char* replace)
    {
        std::string const text(str);
        std::regex const reg(find);
        std::string const newStr = std::regex_replace(text, reg, replace);

        //Convert back to char
        char *newChar = new char[newStr.size() + 1];
        std::copy(newStr.begin(), newStr.end(), newChar);
        newChar[newStr.size()] = '\0'; // terminating 0

        return newChar;
    }


    const char* find = "hello";
    const char* replace = "goodbye";
    const char* oldStr = "hello james";

    const char* newStr = m->replaceInString(find, oldStr, replace);

假設您希望從.c文件中調用函數,則可以使用strdup (請參見下面的代碼)。

#include <string>
#include <regex>
#include <cstdio>
#include <cstdlib>

char* replaceInString(char const *find, char const *str, char const *replace)
{
  return strdup(std::regex_replace(std::string(str), std::regex(find), replace).c_str());
}

int main()
{
  char *newStr = replaceInString("hello", "hello james", "goodbye");
  printf("newStr = %s\n", newStr);
  free(newStr);

  return 0;
}

但是請注意,完成后必須釋放返回的內存。

否則,如@ jerry-coffin建議的那樣,始終使用std::string (請參見下面的代碼):

#include <string>
#include <regex>
#include <iostream>

std::string replaceInString(std::string const &find, std::string const &str, std::string const &replace)
{
  return std::regex_replace(std::string(str), std::regex(find), replace);
}

int main()
{
  std::string str = replaceInString(std::string("hello"), std::string("hello james"), std::string("goodbye"));
  std::cout << str << std::endl;
  return 0;
}

暫無
暫無

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

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