如何使用美国货币等逗号格式化字符串?

时间:2014-05-10 12:51:44

标签: c++

我正在尝试制作一个带有字符串的小程序,然后以三个字符间隔为其添加逗号,例如如何格式化货币金额。 (即1000变为1,000,10000变为10,000)。

到目前为止,这是我的尝试,它几乎可以运作:

 #include <string>
 #include <iostream>
 using namespace std;

 int main() {

  string a = "123456789ab";

  int b = a.length();

  string pos;
  int i;
  for (i = b - 3; i >= 0; i-=3) {
    if (i > 0) {
      pos = "," + a.substr(i,3) + pos;
    }
  }
  cout << pos;
  return 0;
 } 

带有示例字符串的输出是:

,345,678,9ab

似乎它不想抓住前1到3个字符。我的代码怎么办?

2 个答案:

答案 0 :(得分:0)

第一个字符位于索引0.但是当substr为0时,您永远不会调用i,因此您永远无法获得该字符。

答案 1 :(得分:0)

#include <string>
 #include <iostream>
 using namespace std;

 int main() {

  string a = "123456789ab";

  int b = a.length();

  string pos;
  int i;
  for (i = b - 3; i > 0; i-=3) {
    if (i > 0) {
      pos = "," + a.substr(i,3) + pos;
    }
  }
  cout << a.substr(0,i+3)+pos;
  return 0;
 }

当索引为负数时,表示它不能再生成3个组。但可能有1-3个数字可能会被留下。我们需要明确添加它们