你们/ gals认为从QString中删除前导零的最佳方法是什么?
我正在处理类似的数字:
099900000002
008800000031
88800000043
我是否必须迭代每个字符,一次一个,或者使用我没有想过的QString :: replace()函数是否有更优雅的方式?
答案 0 :(得分:10)
从字符串的开头删除任意数量的零:
myString.remove( QRegExp("^[0]*") );
答案 1 :(得分:5)
我查看了QString
文档,没有一个是简单的,并且明确表达了你想做的事情。就像这样写
void removeLeadingzeros(QString &s){
int i = 0;
while(i < s.length() && s[i]=='0'){
i++;
}
s.remove(0,i);
}
答案 2 :(得分:1)
我对QStrings并不熟悉,所以我基于std :: string。也许你可以简单地转换?
如果您可以使用boost,那么您可以执行以下操作:
std::string s("000003000000300");
boost::trim_left_if( s, boost::is_any_of("0") );
答案 3 :(得分:1)
如果优雅你的意思不是自己迭代,那么事实上Qt容器与STL算法大部分兼容可能会有所帮助(但不是必要的有效):
QString::iterator n = std::find_if(myQString.begin(), myQString.end(), std::bind2nd(std::not_equal_to<QChar>(), '0'));
myQString.remove(0, n-myQString.begin());
花式。但是你会更好地按照UmNyobe的建议进行迭代,这样更快更清晰。
答案 4 :(得分:1)
QString mystring = "00000545465651"
;
mystring = QString::number(mystring.toInt());
// 结果 = mystring = "545465651";
通过将 QString
转换为整数,将删除前导零。
比您只需将其转换回 QString
。
答案 5 :(得分:0)
这是一个优雅的单行程序,不使用正则表达式:
while (s.startsWith('0')) { s.remove(0,1); }
不是最快的,但它比正则表达式版本快得多。另外,如果你有C ++ 11,你可以这样做:
s.remove(0,
std::distance(s.begin(),
std::find_if_not(s.begin(), s.end(),
[](QChar c) { return c == '0'; } )));
这是非常快的。
答案 6 :(得分:0)
假设myString
是一个数字,或者您可以通过检查ok
是否为true
来了解
bool ok = false;
QString::number(myString.toLongLong(&ok));