0

文字列を使った挿入ソートを書いています。次のようなchar配列があります。

 char array1[4] = {'a', 'b', 'c', '\0'};
 char array2[4] = {'b', 'd', 'e', '\0'};

そして、私はこの操作を使用する必要があります:

char string[2];
string[1] = array1;
string[2] = array2;

出来ますか ?

挿入ソートでは文字列が必要だからです。これは挿入コードです:

char* insertionsort(char* a, int n) {
   int k;
   for (k = 1; k < n; ++k) {
      int key = a[k];
      int i = k - 1;

      while ((i >= 0) && (key < a[i])) {
         a[i + 1] = a[i];
         --i;
      }

      a[i + 1] = key;
   }

   return a;
}
4

3 に答える 3

2

だから私はこの操作を書く必要があります:

char string [2];
string[1] = array1;
string[2] = array2;

出来ますか ?

短い答え: いいえ、そうではありません。配列は代入できません。strcpyある文字列から別の文字列に要素をコピーするために使用できますが、この場合も機能しませんstring.2文字の配列として定義しましたが、文字の配列全体をそれぞれに割り当てようとしていますそれらの。

それがあなたが望むものであることは完全には明らかではありませんが、1つの可能性は次のとおりです。

char *string[2];
string[1] = array1;
string[2] = array2;

この場合、は char への 2 つのポインターstringの配列であり、割り当てによって、以前に定義した各文字列の最初の文字を指すように設定されます。

あなたはこれを C と C++ の両方としてタグ付けしたので、それについて少し追加します。これは非常に多くの C コードとして書かれています。実際に C++ を使用している場合は、次のようなものが必要になるでしょう。

std::string[2] = {"abc", "bde"};

C でも、意味のあるところでは文字列定数を初期化して使用したいと思います。

char array1[] = "abc";
char array2[] = "bde";

char *string[] = {array1, array2};

または単に:

 char const *string[] = {"abc", "bde"};
于 2012-10-23T04:22:05.357 に答える
2
char array1[4] = {'a', 'b', 'c', '\0'};  // same as char *array1 = "abc";
char array2[4] = {'b', 'd', 'e', '\0'};  // same as char *array2 = "bde";

char *string [2]; // an array of 'pointers to chars' / array of strings

string[1] = array1; // this will work
string[2] = array2; // this will work 
于 2012-10-23T04:20:49.417 に答える
0

もちろん違います。覚えとけ、

    char ary[4] = {'a', 'b', 'c', '\0'}; //define an array of char

次のように ary を使用する場合:

    char string[2];
    string[0] = ary;

ary は、配列の名前からポインターに縮退します! したがって、上記で行うことは、ポインターを char 型に割り当てることであり、コンパイル時に型の警告が発生します。

これは C では非常に重要です。

そして、次のように修正できます。

    char *string[2];             //an array of pointers to char
    string[1] = array1;          //correct
    string[2] = array2;
于 2012-10-23T04:55:33.557 に答える