如何使用C ++从字符串中删除前导零?

时间:2014-09-08 14:25:22

标签: c++ string

我想从"0000000057"等字符串中删除前导零。

我确实喜欢这样,但没有得到任何结果:

string AccProcPeriNum = strCustData.substr(pos, 13);

string p48Z03 = AccProcPeriNum.substr(3, 10);

我只想输出 57

C ++中的任何想法?

6 个答案:

答案 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");

LIVE DEMO

答案 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;
}