首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用C++从字符串中删除前导零?

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

Stack Overflow用户
提问于 2014-09-08 14:25:22
回答 5查看 45.8K关注 0票数 14

我想从像"0000000057"这样的字符串中移除前导零。

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

代码语言:javascript
复制
string AccProcPeriNum = strCustData.substr(pos, 13);

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

我只想输出57

在C++有什么想法吗?

EN

回答 5

Stack Overflow用户

发布于 2015-07-05 02:39:29

皮奥特S的回答是好的,但是有一种情况它会返回错误的答案,那就是全零的情况:

代码语言:javascript
复制
000000000000

若要考虑到这一点,请使用:

代码语言:javascript
复制
str.erase(0, min(str.find_first_not_of('0'), str.size()-1));

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

票数 34
EN

Stack Overflow用户

发布于 2014-09-08 14:45:19

虽然这可能不是最有效的方法(就运行时速度而言),但我很想做这样的事情:

代码语言:javascript
复制
std::cout << std::stoi(strCustData);

当输入完全由0组成时,它提供了一个合理的输出(一个单一的'0')。只有当/如果分析显示这个简单的解决方案是一个问题时,我才会考虑编写更复杂的代码,以期提高速度(我怀疑会出现这种情况)。

这里的明显限制是,这确实假定前导零后面的字符是数字。这在您的示例中显然是正确的,但我认为可以想象,您拥有的数据是不正确的。

票数 2
EN

Stack Overflow用户

发布于 2014-09-08 14:32:22

这应该是一个可以应用于任何std::basic_string类型(包括std::string)的泛型函数:

代码语言:javascript
复制
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();
}

在你的例子中,你会像这样使用它:

代码语言:javascript
复制
string x = "0000000057";
string trimmed = remove_leading(x, '0');

// trimmed is now "57"

(见演示.)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25726531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档