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

Wes*_*Wes 5 c++ qt qt4

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

我正在处理如下数字:

099900000002
008800000031
88800000043
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ris 10

从字符串的开头删除任意数量的零:

myString.remove( QRegExp("^[0]*") );
Run Code Online (Sandbox Code Playgroud)

  • 在我测量之前,我养成了不谈性能的习惯.我做了一些基准测试,在我的机器上,RegEx版本每次迭代大约需要0.012ms,而你的`removeLeadingZeros`版本每次迭代需要大约0.00034ms.虽然它肯定更快,但我认为RegEx的简单性和可读性超过了其他功能的速度的好处,直到它成为瓶颈.除非被称为每秒数千次和数千次,否则不太可能发生的事情. (2认同)

UmN*_*obe 5

我查看了QString文档,没有一个是简单的,同时明确你想做什么.就这样写

void removeLeadingzeros(QString &s){

 int i = 0;
 while(i < s.length() && s[i]=='0'){
  i++;
 }

 s.remove(0,i);
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么你会使用正则表达式来做这么简单的事情,性能是你写 C++ 的原因?为这个答案+1。遗憾的是 QString 没有可以输入字符的修剪功能。 (2认同)