从QString中删除前导零的最佳方法

时间:2012-01-06 15:32:13

标签: c++ qt qt4

你们/ gals认为从QString中删除前导零的最佳方法是什么?

我正在处理类似的数字:

099900000002
008800000031
88800000043

我是否必须迭代每个字符,一次一个,或者使用我没有想过的QString :: replace()函数是否有更优雅的方式?

7 个答案:

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