2013-12-10 13 views
0

我正在編程一個洗牌程序。我得到它的工作,我想在洗牌之前和洗牌之後顯示牌。我有一個間距問題處理數字10.C++用單位和雙位數排列間距

我知道我可以使用"\t",但有沒有其他方式。

輸出的一個片段:

A of Spades 
2 of Spades 
3 of Spades 
4 of Spades 
5 of Spades 
6 of Spades 
7 of Spades 
8 of Spades 
9 of Spades 
10 of Spades 
J of Spades 
Q of Spades 
K of Spades 

我幾乎可以肯定,這是導致該問題的assignDeck(),但我會包括。

void assignDeck(string *suit, string *cards, string *deck) 
{ 
    int p=0; 
    for(int i=0; i<4; i++) 
    { 
     for(int j=0; j<13; j++) 
     {  
      deck[p] = cards[j] + " of " + suit[i]; 
      p++; 
     } 
    } 
} 
void showDeck(string *deck) 
{ 
    for (int i=0; i<52; i++) 
    { 
     cout<<deck[i]<<endl; 
    } 
} 
+0

你將永遠有這個空間問題。你需要添加額外的空間來填補這個缺點。這是因爲10有一個額外的字符。 如果使用單個數字時,您的總字符串長度爲11,則如果添加了一位數字,則長度將變爲12,因此空格會移動並且長度也會增加。 –

+0

如果你不是在任何地方傳遞字符串指針,而是實際的數字,你會發現這更容易。 –

回答

2

由於您將整行輸出爲一個字符串,因此您可以在將卡片字符串添加到卡組時將其修改。

void assignDeck(string *suit, string *cards, string *deck) 
{ 
    int p=0; 
    for(int i=0; i<4; i++) 
    { 
     for(int j=0; j<13; j++) 
     { 
      if (cards[j].size() < 2) 
      cards[j] = " " + cards[j]; 
      deck[p] = cards[j] + " of " + suit[i]; 
      p++; 
     } 
    } 
} 

編輯:這只是爲了讓您對代碼有最小的更改。對於一般情況,我建議您使用<iomanip>標題中的std::setw函數。

+0

爲了解決格式問題,修改名稱字符串在我看來是不好的做法。 –

+0

是的,它對我來說似乎並不好看:(我正要添加這個) –

+0

好吧,我看到你做了什麼,這對我有用,你用0對齊了所有的東西。可以在這裏添加空格到最後,它會起反作用 –