如何用C++去除字符串中的前导零?

kkbh8khc  于 2022-12-15  发布在  其他
关注(0)|答案(6)|浏览(450)

我想删除字符串中的前导零,如"0000000057"
我这样做了,但没有得到任何结果:

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

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

我只想要输出57
在C++中有什么想法吗?

l3zydbqr

l3zydbqr1#

#include <string>    

std::string str = "0000000057";
str.erase(0, str.find_first_not_of('0'));

assert(str == "57");

LIVE DEMO

rlcwz9us

rlcwz9us2#

Piotr S's answer是好的,但是有一种情况会返回错误答案,即全零情况:

000000000000

要考虑这一点,请用途:

str.erase(0, std::min(str.find_first_not_of('0'), str.size()-1));

即使当str.size()将是0时,它也会工作。

gjmwrych

gjmwrych3#

尽管这可能不是最高效的(就运行时速度而言)方式,但我还是想做一些类似的事情:

std::cout << std::stoi(strCustData);

这是简单和直接的使用,并给出了合理的输出(一个单一的'0'),当输入完全由0组成。只有当/如果分析显示,这个简单的解决方案是一个问题,我会考虑编写更复杂的代码,希望提高速度(我怀疑这会发生)。
这里明显的局限性是,它假设前导零后面的字符是数字,这在你的例子中显然是正确的,但是我想你可以想象你有一些不正确的数据。

izkcnapc

izkcnapc4#

这应该是一个通用函数,可以应用于任何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"

(x一e0一f1 x.)

fcy6dtqo

fcy6dtqo5#

#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

}
7cjasjjr

7cjasjjr6#

这段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;
}

相关问题