C++ 內置變數字元串有什麼好的實現思路?

很多軟體都提供了內置的字元串變數,供外部調用,如VS2010的工程設置中(下圖)

通過類似$(var)的形式調用內部變數,形成新的路徑,即字元串。

有些重命名軟體也採用類似的方式(下圖)

如千千靜聽,通過類似%(var)的形式,調用程序內部的字元串變數,最終形成新的,由用戶定製的文件名字元串。

請問這種調用內置字元串變數的實現方式有哪些,有什麼比較簡便的方式?


正則表達式替換


補一份完整的代碼吧,C++11:

#include &
#include & #include &
#include &

int main() {

std::map& 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++重載運算符如何確定運算符位置?

TAG:編程語言 | C編程語言 | C |