我想从"0000000057"
等字符串中删除前导零。
我确实喜欢这样,但没有得到任何结果:
string AccProcPeriNum = strCustData.substr(pos, 13);
string p48Z03 = AccProcPeriNum.substr(3, 10);
我只想输出 57 。
C ++中的任何想法?
答案 0 :(得分:20)
Piotr S的答案很好,但有一种情况会回答错误的答案,即全部为零:
000000000000
要考虑这一点,请使用:
str.erase(0, min(str.find_first_not_of('0'), str.size()-1));
即使str.size()为0,也可以。
答案 1 :(得分:17)
#include <string>
std::string str = "0000000057";
str.erase(0, str.find_first_not_of('0'));
assert(str == "57");
答案 2 :(得分:2)
虽然它可能不是最有效的(就运行时速度而言)做事的方式,但我很想做一些像:
std::cout << std::stoi(strCustData);
这简单易用,当输入完全由0
s组成时,会给出合理的输出(单个'0')。只有当/如果分析表明这个简单的解决方案是一个问题时,我会考虑编写更复杂的代码以期提高速度(我怀疑会出现这种情况)。
这里明显的限制是假设前导零之后的字符是数字。这在你的样本中显然是正确的,但我想可以想象你有数据并不是真的。
答案 3 :(得分:0)
这应该作为一个通用函数,可以应用于任何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"
(See a demo。)
答案 4 :(得分:0)
#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
}
答案 5 :(得分:0)
此C语言友好代码删除前导零,并且可以使用,只要char数组的长度适合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;
}