更换的std ::字符串
问题描述:
我的字符串为std::string str ("DDWD");
更换的std ::字符串
我想改变符合下列
D = [0-9] W = [a-z]
洙... ("[0-9][0-9][A-Z][0-9]")
替换法似乎并不accomade此,所以我尝试了类似于
string tmp = "DDDWD";
int len = 0;
len = tmp.length();
for(int i = 0; i < len; i++)
{
if (tmp[i] == 'D')
{
tmp.replace(i,1,"[0-9]");
i+=2;
}
}
但试试如果要更改字母D和W都存在问题,并且无法正确更改它们?
有没有人知道如何将每个字母同时更改为相应的字符串?
感谢您的任何帮助
答
我认为,如果你使用一个单独的字符串,这将是清洁:
string tmp = "DDDWD";
string tmp2;
for (int i=0; i<tmp.size(); ++i)
{
if (tmp[i] == 'D')
tmp2 += "[0-9]";
else if (tmp[i] == 'W')
tmp2 += "[a-z]";
else
tmp2 += tmp[i];
}
tmp.swap(tmp2);
// or in C++11
// tmp = std::move(tmp2);
答
看起来像你刚刚结束你的循环早。
len = tmp.length();
for(int i = 0; i < len; i++)
{
...所以你保存要迭代的长度,即使字符串变长,你也会停在旧的长度。
答
的replace
方法适用于位置,而不是子。因此,替换将是一个两步的过程:find
第一,然后replace
与find
的结果,直到find
不再发现任何东西。
但是你这样做的方式也适用,如果你向后运行循环(从头开始,然后按照你的方式)。
答
int main()
{
std::string tmp = "DDDWD";
char *tmp2=new char(5*(strlen(tmp.c_str()) +1));
cout << "tmp is " << tmp;
for (int i=0; i<tmp.size(); ++i)
{
if (tmp[i] == 'D' && i==0)
tmp2 = strcpy(tmp2,"[0-9]");
else if(tmp[i] == 'D' && i!=0)
tmp2 = strcat(tmp2,"[0-9]");
else if (tmp[i] == 'W' && i==0)
tmp2 = strcpy(tmp2,"[a-z]");
else if (tmp[i] == 'W' && i!=0)
tmp2 = strcat(tmp2,"[a-z]");
}
cout << "tmp2 is :" << tmp2;
getchar();
}
答
如果您负担得起,请使用Boost的String Algo库。它有很多有用的字符串算法。您的问题将读取:
// #include <boost/algorithm/string/replace.hpp>
std::string tmp = "DDDWD";
boost::replace_all(tmp, "D", "[0-9]");
boost::replace_all(tmp, "W", "[a-z]");
什么是“问题”?你实际得到的输出是什么?当你在调试器中完成这一步时,你观察到了什么? – 2012-01-07 16:31:25
看到这个[link](http://stackoverflow.com/questions/1494399/how-do-i-search-find-and-replace-in-a-standard-string) – sivakg2000 2012-01-07 16:40:08