2

我想删除字符串中的任何数字字符,这是我的代码:

int i=0;
while (num[i]!=NULL)
{
    if (!(num[i]>='0' && num[i]<='9'))
        num.erase(i,1);
    i++;
}

认为num是e2,那么它应该只有2,但它变成了“e”。或者如果 num 是 2er4,那么它将是 2e4,但应该是 24,如何修复此代码?

4

3 回答 3

1

您的代码有一些问题:第一个是您的if条件是当您声明您想要相反时,如果它们是数字则删除字符。另一个问题是,当您删除一个字符时,字符串的长度会发生变化,因此索引i不再有效。

然后循环,而作为位置的字符i(由于我列出的第二个问题可能超出范围)不是NULL. 但NULL仅用于指针,如果有的话,你应该检查一下'\0'。尽管我也不建议这样做,因为没有任何东西真正说明 a std::string(我想num是)内的字符串数据必须以零结尾。而是使用字符串长度循环,或使用迭代器。

就像我在评论中所说的那样,它可以比您的代码简单得多,只需调用一个函数即可。

于 2013-09-25T07:22:55.893 回答
1

正如 Joachim 所指出的,标准库为您提供了可以轻松用于实现目标的算法。从标准库容器中删除元素的常用方法是使用erase remove idiom。在这种std::string情况下,该类可以被视为一个容器,并且该算法按预期工作。这是一个工作示例,其中该std::isdigit函数用于确定从字符串中删除哪些元素:

#include <string>
#include <iostream>
#include <algorithm>
#include <cctype>

int main()
{
  std::string s = "abc123def456!!??";
  auto it = std::remove_if(s.begin(),
                           s.end(),
                           [](char c) { return std::isdigit(c);});

  s.erase(it, s.end());

  std::cout << s << std::endl;
}
于 2013-09-25T07:59:09.343 回答
0

Finally I fix it with Joachim Pileborg Tips, Thank You Man;

int i=0;
while (num[i]!=NULL)
{
    if (!(num[i]>='0' && num[i]<='9'))
        {num.erase(i,1); if ((i-1)>=0) i--;}
    else i++;
}
于 2013-09-25T09:08:13.613 回答