我想删除字符串中的任何数字字符,这是我的代码:
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,如何修复此代码?
我想删除字符串中的任何数字字符,这是我的代码:
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,如何修复此代码?
您的代码有一些问题:第一个是您的if
条件是当您声明您想要相反时,如果它们是数字则删除字符。另一个问题是,当您删除一个字符时,字符串的长度会发生变化,因此索引i
不再有效。
然后循环,而作为位置的字符i
(由于我列出的第二个问题可能超出范围)不是NULL
. 但NULL
仅用于指针,如果有的话,你应该检查一下'\0'
。尽管我也不建议这样做,因为没有任何东西真正说明 a std::string
(我想num
是)内的字符串数据必须以零结尾。而是使用字符串长度循环,或使用迭代器。
就像我在评论中所说的那样,它可以比您的代码简单得多,只需调用一个函数即可。
正如 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;
}
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++;
}