2016-04-26 20 views
-2

私は交換プログラムを作成していますが、別の6文字配列を保持するchar配列を持っています。 1つのことを除いてプログラムは正常に動作します:配列の値を出力しようとすると、最初の文字だけが出力されます。char配列の配列C++

コードが正しくないかもしれませんが、私はこの交換を行う別の方法を見つけることができませんでした。実際には、問題はその配列を指すポインタにあると思いますが、やはりわかりません。あなたは文字の配列の配列を作成していない

char t[6]; 

:この行では

#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

してください[編集]書式設定を修正するための質問:

*a is equivalent to a[0] 

は何あなたが探していると、代わりにchar型のポインタの配列です。今後の投稿については、投稿する前にプレビューを確認してください。 –

+3

C++の場合は、文字列を表現するために['std :: string'](http://en.cppreference.com/w/cpp/string)を使用してください(と' 'std :: swap'') (http://en.cppreference.com/w/cpp/algorithm/swap)それらを交換する)? –

+0

その他:*「別の6文字の配列を保持するchar配列があります」*そうではありません。あなたはあなたの学習教材をより慎重に読む必要があります。文字列操作のためにC配列を使用するよう実際に指示されている場合は、より良い本を入手する必要があります。 –

答えて

2

:ここ

はコードです。シンプルな文字配列を作成しています。したがって、すべての要素が単一の文字であることは驚くことではありません。 *aa[0]に実際に等価であることを

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

注:

は、あなたはおそらくしたいです!

tmp配列が間違って使用されています.Cでは、代入演算子ではなくstrcpy()という文字列をコピーします。または、元の文字列へのポインタを保持します。

しかし、C++を使用しているので、なぜstd::stringを使用しないのですか?たぶんあなたは配列を学んでいて、難しい方法でそれをやりたいのですか?

+0

ええ、そうです、私はCコースを取っています+ +そういうわけで私はそうしています。ご協力いただきありがとうございます。 –

2

tをcharの配列として定義し、前に定義した配列のアドレスの逆参照を初期化しました。これは、最初の要素を取得することと同じです。

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