从一个更复杂的程序简化了代码,但是在这种更加简化的情况下,我仍然面临着问题。
所以我试图通过使用指针从字符串中删除字符:
string str = "Hellxo World";
char *eraseHere;
for(int i = 0; i < str.length(); i++) {
if (str[i] == 'x') {
eraseHere = &str[i];
str.erase(*eraseHere);
}
}
我期望str成为Hello World,但是相反,它给出了out_of_range异常并停止了程序。
不擦除这里是否有指向字符“ x”的指针?我在printf中使用了aserHere尝试测试出了什么问题:
printf("%c\n",*eraseHere);
但是它可以完美打印该字符。
谢谢。
答案 0 :(得分:3)
string
类不支持使用指针擦除,因此您不能这样做。
您可以使用 iterator 进行擦除,这几乎是同一件事
for (auto i = str.begin(); i != str.end(); ) {
if (*i == 'x')
i = str.erase(i);
else
++i;
}
即使,即使它起作用,您的代码也有一个常见的新手错误,即您忽略了擦除字符时字符串变短的问题。因此,在擦除字符后执行i++
是不正确的,因为您将在刚删除的'x'
之后跳过字符。
答案 1 :(得分:0)
您可以简单地存储“ x”的索引,然后在循环结束后将其删除...或者您可以在上述答案中使用 iterator
string str = "Hellxo World";
char *eraseHere;
int indx=-1;
for(int i = 0; i < str.length(); i++)
{
if (str[i] == 'x')
{
eraseHere = &str[i];
indx=i;
}
}
indx!=-1 ? (str.erase(indx,1)):str;
cout<<str<<endl;