template <typename T_STR, typename T_CHAR>
T_STR remove_leading(T_STR const & str, T_CHAR c)
{
auto end = str.end();
for (auto i = str.begin(); i != end; ++i) {
if (*i != c) {
return T_STR(i, end);
}
}
// All characters were leading or the string is empty.
return T_STR();
}
在您的情况下,可以这样使用它:
string x = "0000000057";
string trimmed = remove_leading(x, '0');
// trimmed is now "57"
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="00000001";
cout<<s<<endl;
int a=stoi(s);
cout<<a;
//1 is ur ans zeros are removed
}
6条答案
按热度按时间l3zydbqr1#
LIVE DEMO
rlcwz9us2#
Piotr S's answer是好的,但是有一种情况会返回错误答案,即全零情况:
要考虑这一点,请用途:
即使当
str.size()
将是0
时,它也会工作。gjmwrych3#
尽管这可能不是最高效的(就运行时速度而言)方式,但我还是想做一些类似的事情:
这是简单和直接的使用,并给出了合理的输出(一个单一的'0'),当输入完全由
0
组成。只有当/如果分析显示,这个简单的解决方案是一个问题,我会考虑编写更复杂的代码,希望提高速度(我怀疑这会发生)。这里明显的局限性是,它假设前导零后面的字符是数字,这在你的例子中显然是正确的,但是我想你可以想象你有一些不正确的数据。
izkcnapc4#
这应该是一个通用函数,可以应用于任何
std::basic_string
类型(包括std::string
):在您的情况下,可以这样使用它:
(x一e0一f1 x.)
fcy6dtqo5#
7cjasjjr6#
这段C语言友好代码删除了前导零,只要char数组的长度在
int
范围内,就可以使用它: