2014-01-23 59 views
-4

因此,這裏是我的代碼:如何在C++中間隔strcat?

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

const int MAX_SIZE1 = 20; 
const int MAX_SIZE2 = 10; 

int main() 
{ 
    char a[MAX_SIZE1][MAX_SIZE1][MAX_SIZE2]; 
    int n, i, j; 
    cin >> n; 
    for (i = 0; i < n; i++) 
     for (j = 0; j < n; j++) 
      cin >> a[i][j]; 

    char s[MAX_SIZE1 * MAX_SIZE1 * (MAX_SIZE2 - 1) + 1]; 
    int hor = 0, vert = 0; 
    while (hor < n/2 && vert < n/2) 
    { 
     for (i = vert; i < n - vert; i++) 
      strcat(s, a[hor][i]); 
     for (i = hor + 1; i < n - hor; i++) 
      strcat(s, a[i][n - vert - 1]); 
     for (i = n - vert - 2; i >= vert; i--) 
      strcat(s, a[n - hor - 1][i]); 
     for (i = n - hor - 2; i > hor; i--) 
      strcat(s, a[i][vert]); 
     hor++; 
     vert++; 
    } 
    if (n % 2) 
     for (i = vert; i < n - vert; i++) 
      strcat(s, a[hor][i]); 
    else 
     for (i = hor; i < n - hor; i++) 
      strcat(s, a[i][vert]); 
    cout << s << endl; 
    return 0; 
} 

我有一些問題。如何修改它以便在輸出的字符串中的單詞之間獲得間隔?以及如何擺脫我的輸出開頭的尷尬的50行(字面上)奇怪的符號?

編輯:對不起。認爲這並不重要。輸入應該是最多20x20的單詞,每個單詞不要超過9個字符。輸出應該是一個s字符串,它表示通過從左上角開始以順時針方向讀取數組形成的句子。問題是..我在輸出開始時得到了奇怪的符號,並且在單詞之間沒有間隔。

+1

請提供具體的輸入和預期的輸出。我們無法輸入20x20x10次來測試您的程序。 – herohuyongtao

+5

在C++中,你會使用'std :: string'而不是這個C風格的亂碼。 –

+0

我編輯了我原來的帖子。抱歉。 – user3213110

回答

3

使用C++而不是C

由於您使用C++,你應該寫在C++這樣你的代碼,使用std::string。你的一個問題(未初始化的字符串)可以用這種方法修復,因爲在C++中定義未初始化的字符串是不可能的。


更換

#include <string.h> 

通過

#include <string> 

更換

char s[MAX_SIZE1 * MAX_SIZE1 * (MAX_SIZE2 - 1) + 1]; 

通過

std::string s; 

更換

strcat(s, a[hor][i]); 

通過

s = s + a[hor][i]; 

如果你仍然想用C

你必須初始化輸出字符串:

char s[MAX_SIZE1 * MAX_SIZE1 * (MAX_SIZE2 - 1) + 1] = ""; 

未初始化字符串通常包含垃圾,並strcat增加了它,而不是刪除它。另外,如果你想分隔符,你應該明確地編碼; strcat本身不添加任何分隔符:

strcat(s, ","); 
+0

非常感謝!我有另一個問題。如果你願意回答或者至少給我一個提示,我會非常感激。從左上角順時針讀取數組相對容易,但我似乎無法確定如何逆時針旋轉,從右下角開始。 – user3213110

+0

@ user3213110請將此作爲單獨的問題發佈,以防止混淆 – anatolyg

+0

好的,我只是這麼做了。 – user3213110