我想从字符串中删除前导零,例如"0000000057"
。
我尝试了以下方法但没有得到任何结果:
string AccProcPeriNum = strCustData.substr(pos, 13);
string p48Z03 = AccProcPeriNum.substr(3, 10);
我希望输出只有57。
C++中有任何想法吗?
#include <string>
std::string str = "0000000057";
str.erase(0, str.find_first_not_of('0'));
assert(str == "57");
"0000000"
有所有前导零,所以应该返回一个空字符串,问题并没有要求返回包含有效数字的字符串。 - AntonioPiotr S的答案很好,但有一种情况它会返回错误的答案,那就是全部为零的情况:
000000000000
要考虑这个,请使用:
str.erase(0, std::min(str.find_first_not_of('0'), str.size()-1));
即使 str.size()
为 0
,它仍然能够工作。
str.size()-1
通常是一种非常危险的操作,需要进行保护。 - Antonio这应该是一个通用函数,可以应用于任何 std::basic_string
类型(包括 std::string
):
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"
(查看演示.)
虽然这可能不是最高效的方法(从运行时间速度方面来看),但我会倾向于做类似以下的事情:
std::cout << std::stoi(strCustData);
int
。 - Andreas#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
}
这段C语言友好的代码可以去除前导零,并且只要字符数组的长度适合于int
,就可以使用:
char charArray[6] = "000342";
int inputLen = 6;
void stripLeadingZeros() {
int firstNonZeroDigitAt=0, inputLen = strlen(charArray);
//find location of first non-zero digit, if any
while(charArray[firstNonZeroDigitAt] == '0')
firstNonZeroDigitAt++;
//string has no leading zeros
if(firstNonZeroDigitAt==0)
return;
// string is all zeros
if(firstNonZeroDigitAt==inputLen) {
memset(charArray, 0, sizeof charArray);
strcpy(charArray, "0");
inputLen = 1;
return;
}
//shift the non-zero characters down
for(int j=0; j<inputLen-firstNonZeroDigitAt; j++) {
charArray[j] = charArray[firstNonZeroDigitAt+j];
}
//clear the occupied area and update string length
memset(charArray+inputLen-firstNonZeroDigitAt, 0, inputLen-firstNonZeroDigitAt+1);
inputLen -= firstNonZeroDigitAt;
}
aoti()
。如果你想保留它作为字符串,那肯定有问题,因为前导零不是偶然出现的。它们肯定是固定大小字段定义格式的一部分。 - user207421