2016-04-26 105 views
-2

我寫一個交換程序和我有一個字符數組保持另外6個字符數組的。該程序工作正常,除了一件事:當我嘗試打印數組的值,它只打印第一個字母。陣列字符數組C++

也許代碼是不正確的,但我沒有找到另一種方法,使這種交流。其實我認爲問題是指向那個陣列的指針,但是我不確定。

下面是代碼:

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

int main(int argc, char* argv[]) 
{ 
    cout<<"EXCHANGE POKEMON:"<<endl; 
char a[100]="PIKACHU", b[100]="CHARMELEON", c[100]="GEODUDE", d[100]="GYARADOS", e[100]="BUTTERFREE", f[100]="MANKEY", tmp[100]; 
char t[6] = {*a,*b,*c,*d,*e,*f}; 

while(1) 
{ 
    for(int i = 0; i < 6; i++) 
    { 
    cout << i << ") " << t[i] <<endl; 
    } 

    cout<<endl<<"Choose a pokemon:"; 

    int x, y; 
    cin>>x; 

    if(x == -1) 
    { 
    exit(0); 
    } 
    cout << "Choose a pokemon to exchange with:"; 
    cin>>y; 

    *tmp = t[x]; 
    t[x] = t[y]; 
    t[y] = *tmp; 
    } 
} 
+2

請[編輯]固定格式的問題。對於未來的帖子,請在發帖前查看預覽。 –

+3

如果是C++,爲什麼不使用['std :: string'](http://en.cppreference.com/w/cpp/string)來表示字符串(和['std :: swap'] (http://en.cppreference.com/w/cpp/algorithm/swap)交換它們)? –

+0

此外:*「我有一個字符數組,可容納另外6個字符數組」*不,你不知道。你需要更仔細地閱讀你的學習材料;如果它實際上告訴你使用C數組進行字符串操作,你應該得到一本更好的書。 –

回答

2

利用該行:

char t[6]; 

沒有創建炭的數組的數組。你正在創建一個簡單的字符數組。所以每個元素都是單個字符並不奇怪。

你可能想:

char *t[6] = {a, b, c, d, e, f}; 

注意,*a實際上相當於a[0]

然後使用tmp數組錯誤:在C中,您使用strcpy()而不是賦值運算符來複制字符串。或者,您可以持有指向原始字符串的指針。

但是,你正在使用C++,那麼爲什麼不直接使用std::string?也許你只是在學習數組,並希望以艱難的方式來完成它?

+0

是的,你是對的我正在學習C++課程,這就是爲什麼我這樣做。 BTW感謝您的幫助。 –

2

您將t定義爲char數組,初始化解引用之前定義的數組的地址。這相當於獲得他們的第一個元素。

*a is equivalent to a[0] 

你所尋找的是字符指針,而不是一個數組:

char *t[6] = {a,b,c,d,e,f};