如何用标准c++库替换字符串的一部分?
QString s("hello $name"); // Example using Qt.
s.replace("$name", "Somename");
如何用标准c++库替换字符串的一部分?
QString s("hello $name"); // Example using Qt.
s.replace("$name", "Somename");
当前回答
std::string replace(std::string base, const std::string from, const std::string to) {
std::string SecureCopy = base;
for (size_t start_pos = SecureCopy.find(from); start_pos != std::string::npos; start_pos = SecureCopy.find(from,start_pos))
{
SecureCopy.replace(start_pos, from.length(), to);
}
return SecureCopy;
}
其他回答
string.replace(string.find("%s"), string("%s").size(), "Something");
您可以将其包装在一个函数中,但这种单行解决方案听起来是可以接受的。 问题是这只会改变第一次出现,您可能想要遍历它,但它也允许您使用相同的令牌(%s)在此字符串中插入几个变量。
在c++ 11中,你可以像这样使用std::regex:
#include <regex>
...
std::string string("hello $name");
string = std::regex_replace(string, std::regex("\\$name"), "Somename");
对于转义字符,需要使用双反斜杠。
使用std:: string::替换:
s.replace(s.find("$name"), sizeof("$name") - 1, "Somename");
是的,你可以这样做,但你必须用字符串的find()成员找到第一个字符串的位置,然后用它的replace()成员替换。
string s("hello $name");
size_type pos = s.find( "$name" );
if ( pos != string::npos ) {
s.replace( pos, 5, "somename" ); // 5 = length( $name )
}
如果你打算使用标准库,你真的应该有一本c++标准库的书,它很好地涵盖了所有这些东西。
wstring myString = L"Hello $$ this is an example. By $$.";
wstring search = L"$$";
wstring replace = L"Tom";
for (int i = myString.find(search); i >= 0; i = myString.find(search))
myString.replace(i, search.size(), replace);