c++ - 使用 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 ... }
推荐阅读
- python - 如何在 Python 中使用从 CSV 中提取的值填充数据框
- swagger - APIM 中的自动更新 OpenAPI 规范
- c# - 如何将泛型类型对象传递给类构造函数
- amazon-web-services - Cloud9 给出不同的卷曲响应
- c++builder - Embarcadero C++Builder 10.4 会有社区版吗?
- react-native - 所有 react-native-paper 组件都会抛出关于 Accessibility API 的类型错误
- python - 在 django 模型中,外键没有检索实际值
- flutter - 如何使用dio在flutter中成功响应时导航到不同的屏幕
- java - 将 springboot 升级到 2.4.2 版本后,@ActiveProfiles 注释不起作用
- linux - 如何从提交对象 git ls-tree?