[英]C++ regex - replacing substring in char
I have written the following function to replace substrings in a char. 我编写了以下函数来替换char中的子字符串。 This way involves converting to a std::string then converting back to a const char.
这种方法涉及转换为std :: string,然后转换回const char。 Is this the most efficient way or could I do it without this conversion or even a better way?!
这是最有效的方法吗?如果没有这种转换甚至更好的方法,我可以这样做吗?
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);
Assuming that you want a function to be called from a .c
file you could use strdup
(see code below). 假设您希望从
.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;
}
Note however that you have to free the returned memory after you're done. 但是请注意,完成后必须释放返回的内存。
Otherwise, as @jerry-coffin suggested go all the way with std::string
(see code below): 否则,如@ 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.