関数は次のとおりです:ターゲット文字列内のzhangsan
, lisi
, を文字列,に置き換えます;結果は次のようになります: ; 1.使用されるメソッド;wangwu
names=[\"#1\",\"#2\",\"#3\"]
#1
#2
#3
names=[\"zhangsan\",\"lisi\",\"wangwu\"]
std::string
replace
std::string org_str = "names=[\"#1\",\"#2\",\"#3\"]";
std::string str_0 = "zhangsan";
std::string str_1 = "lisi";
std::string str_2 = "wangwu";
size_t pos_0 = org_str.find("#1");
size_t pos_1 = org_str.find("#2");
size_t pos_2 = org_str.find("#3");
org_str.replace(org_str.begin() + pos_2, org_str.begin() + pos_2 + 2, str_2);
org_str.replace(org_str.begin() + pos_1, org_str.begin() + pos_1 + 2, str_1);
org_str.replace(org_str.begin() + pos_0, org_str.begin() + pos_0 + 2, str_0);
2. sumstd::string
メソッドを使用して結合し、新しい文字列を生成します。find
substr
std::string org_str = "names=[\"#1\",\"#2\",\"#3\"]";
std::string str_0 = "zhangsan";
std::string str_1 = "lisi";
std::string str_2 = "wangwu";
size_t pos_0 = org_str.find("#1");
size_t pos_1 = org_str.find("#2");
size_t pos_2 = org_str.find("#3");
org_str = org_str.substr(0, pos_0) + str_0 + org_str.substr(pos_0 + 2, pos_1 - pos_0 - 2)
+ str_1 + org_str.substr(pos_1 + 2, pos_2 - pos_1 - 2)
+ str_2 + org_str.substr(pos_2 + 2);
cout << org_str.c_str() << endl;
ターゲット配列の を にvector<string>
置き換えます。item
#1;#2...
std::string m_data = "asdfasdf:#0;fasdfsd:#1;fasdfsdf:#2---------";
std::vector<std::string> replace_str;
replace_str.push_back("zhangsan");
replace_str.push_back("lisi");
replace_str.push_back("wangwu");
std::string placeholder = "#";
size_t position_begin = 0;
std::string result_new;
for (auto item = replace_str.begin(); item != replace_str.end(); ++item) {
std::string placeholder_tmp = placeholder + std::to_string(item - replace_str.begin());
size_t found = m_data.find(placeholder_tmp);
if (found != std::string::npos) {
result_new.append(m_data.substr(position_begin, found - position_begin));
result_new.append(*item);
position_begin = found + placeholder_tmp.size();
}
}
result_new.append(m_data.substr(position_begin));
結果は次のようになります。フォーマット
を処理するときに、構造文字列を文字列ノードの下に置くには、元の文字列の前にシフト文字を追加する必要があります。json
json
json
"
\\
string org(buf);
string result;
size_t begin = 0;
size_t pos = org.find("\"");
while (pos != std::string::npos) {
result.append(org.substr(begin, pos - begin)).append("\\");
begin = pos;
pos = org.find("\"", begin + 1);
}
result.append(org.substr(begin, pos - begin));
3.sprintf
関数を使用して%s
新しい文字列を生成します。
std::string org_str = "names=[\"%s\",\"%s\",\"%s\"]";
std::string str_0 = "zhangsan";
std::string str_1 = "lisi";
std::string str_2 = "wangwu";
char* pbuf = new char[org_str.size() + str_0.size() + str_1.size() + str_2.size()]{
0 };
sprintf(pbuf, org_str.c_str(), str_0.c_str(), str_1.c_str(), str_2.c_str());
org_str = pbuf;
delete[] pbuf;
参考文献
1. std::string::find;
2. std::string::replace
3. sprintf