C++ 內置變數字元串有什麼好的實現思路?
很多軟體都提供了內置的字元串變數,供外部調用,如VS2010的工程設置中(下圖)
通過類似$(var)的形式調用內部變數,形成新的路徑,即字元串。
有些重命名軟體也採用類似的方式(下圖)
如千千靜聽,通過類似%(var)的形式,調用程序內部的字元串變數,最終形成新的,由用戶定製的文件名字元串。
請問這種調用內置字元串變數的實現方式有哪些,有什麼比較簡便的方式?
正則表達式替換
補一份完整的代碼吧,C++11:
#include &
#include &
int main() {
std::map& 吐槽:&
{"A", "young"},
{"B", "simple"},
{"C", "naive"},
};
std::regex regex("%\{([^}]*)\}");
std::string str1 = "Too %{A}, too %{B}, sometimes %{C}!", str2;
for(auto p = str1.cbegin(), q = str1.cend(); p != q; ) {
std::smatch match;
if(std::regex_search(p, q, match, regex)) {
str2.append(p, match[0].first);
auto it = map.find(match[1]);
if(it != map.end()) str2.append(it-&>second);
else str2.append(p, match[0].first);
p = match[0].second;
} else {
str2.append(p, q);
break;
}
}
std::cout &<&< str2 &<&< std::endl;
}
printf的格式字元串不就是嗎
只不過把變數名都換成了%d %s %p %u,值是多少和上下文有關而已
也只有C++這種不提供字元串替換功能的語言才能讓人問出這種問題
說個笑話:s.replace(0, 4, "").replace(s.find("even"), 4, "only").replace(s.find(" don"t"), 6, "");
stringstream滿足你的要求。
你需要 #include&
https://github.com/mrtazz/plustache,如果不一定非要用$的話
std::regex或者sprintf
推薦閱讀:
※怎麼讓我寫出個零位元組的類了?
※各位知友都喜歡用什麼IDE?
※把當前各種編程語言的優秀特性集中到一起,設計一種最好的語言,是否可行?
※如何用C++從API開始,寫一款Windows上的視頻播放器?
※C++重載運算符如何確定運算符位置?