【发布时间】:2016-06-03 02:09:11
【问题描述】:
我必须在字符串中用& 替换所有出现的&。
但是如果&后面跟着;,即如果&或&engrave;等,我必须跳过它。它是不被修改的。
我已经写了following code,它似乎运行良好,但我认为我进行了太多比较 - 有更好的方法吗?我可以使用 boost 或 c++11。
#include <string>
#include <iostream>
int main()
{
std::string str = "An R&D string with one more R&D here and S&D or T&engrave; Some More T&D and &&engrave; and R&&D";
std::cout<<"original string is : "<<str<<std::endl;
int index = 0;
while(1)
{
std::string::size_type n = str.find("&",index);
if(n == std::string::npos)
break;
std::string sub = str.substr(n+1, 10);
std::string::size_type m = sub.find("&");
std::string::size_type b = sub.find(";");
if(m != std::string::npos && m<b)
{
auto temp = sub.substr(0,m-1);
sub = temp;
}
if(sub.find(";") == std::string::npos)
{
str.replace(n, 1, "&");
}
index = n+1;
}
std::cout<<"changed string is : "<<str<<std::endl;
}
【问题讨论】:
-
给定的逻辑显然无法替换 & 给定以下字符串“龙与地下城,以及分号,比如这个:;”。这是您的预期结果吗?
-
对于提升,有boost::spirit::xml::encode。
-
你可能想使用正则表达式
-
"Dungeons & colons ;"怎么样 - 这里的预期结果是什么? -
@IgorTandetnik 预期的输出是
"Dungeons &amp; colons ;"我错误地解释了这个问题。