我想从像"0000000057"这样的字符串中移除前导零。
我的确喜欢这个,但没有得到任何结果:
string AccProcPeriNum = strCustData.substr(pos, 13);
string p48Z03 = AccProcPeriNum.substr(3, 10);我只想输出57。
在C++有什么想法吗?
发布于 2015-07-05 02:39:29
皮奥特S的回答是好的,但是有一种情况它会返回错误的答案,那就是全零的情况:
000000000000若要考虑到这一点,请使用:
str.erase(0, min(str.find_first_not_of('0'), str.size()-1));即使str.size()将是0,它也会工作。
发布于 2014-09-08 14:45:19
虽然这可能不是最有效的方法(就运行时速度而言),但我很想做这样的事情:
std::cout << std::stoi(strCustData);当输入完全由0组成时,它提供了一个合理的输出(一个单一的'0')。只有当/如果分析显示这个简单的解决方案是一个问题时,我才会考虑编写更复杂的代码,以期提高速度(我怀疑会出现这种情况)。
这里的明显限制是,这确实假定前导零后面的字符是数字。这在您的示例中显然是正确的,但我认为可以想象,您拥有的数据是不正确的。
发布于 2014-09-08 14:32:22
这应该是一个可以应用于任何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"(见演示.)
https://stackoverflow.com/questions/25726531
复制相似问题