2014-05-10 40 views
0

我想製作一個小程序,需要一個字符串,然後以三個字符間隔向它添加逗號,例如貨幣金額將如何格式化。 (即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個字符。我的代碼出了什麼問題?

+0

當你逐步循環時,你的調試器告訴你什麼? – dutt

回答

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個數字。我們需要明確地添加它們

+0

感謝您的幫助人,這工作完美!爲了理解你改變了些什麼,你添加的內容基本上都是把字符串的前3個字符顯示出來,並且通常顯示它們是正確的? – Ultimabuster

0

第一個字符在索引0處。但是當i爲0時,您永遠不會撥打substr,因此您永遠無法獲得該字符。