[英]Nested string replace using C++
我想用指定的字符串替換字符串中的每個變量。
namespace math {
map<string,string> setVar;
string setVariable(string& str, const map<string,string>& variables) {
for(auto& m : variables) {
size_t pos;
while((pos=str.find(m.first)) != string::npos)
str.replace(pos,m.first.length(),"("+m.second+")");
}
return str;
}
bool isStillContainVariable(const string& str, const map<string,string>& variables) {
for(auto& m : variables)
return (str.find(m.first)!=string::npos) ? false : true;
return false;
}
vector<string> makeToken(string& str) {
if(setVar.size()!=0) {
str = setVariable(str,setVar);
str = isStillContainVariable(str,setVar) ?
setVariable(str,setVar) : str;
}
cout << str << endl;
vector<string> res;
..... //I tokenize the string
return res;
}
}
如果我使用以下代碼,它會正確地重新生成字符串。
int main() {
string str = "-(-(x)+lg(y)+5+ln(z))";
math::setVar["x"] = "lg(pi*lg(y))";
math::setVar["y"] = "z";
math::setVar["z"] = "10";
auto res = math::makeToken(str);
return 0;
}
但是如果我使用下面的代碼,解決方案只是(x)
,但正確的解決方案是sin(pi)
string str = "z";
math::setVar["x"]="sin(y)";
math::setVar["y"]="pi";
math::setVar["z"]="x";
auto res = math::makeToken(str);
如果替換正確,則替換后的string
將不包含任何類型的變量。
我完全不知道如何重新設置字符串。
您需要在makeToken
中使用某種循環:
while (isStillContainsVariables(...))
{ ... do the replacement ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.