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 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 回答
2

所以我需要编写这个操作:

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

是否可以 ?

简短的回答:不,不是。数组不可赋值。您可以使用strcpy将元素从一个字符串复制到另一个字符串,但在这种情况下也不起作用 - 您已定义string为 2 个字符的数组,但您尝试为每个字符分配一个完整的字符数组那些。

尚不完全清楚这是您想要的,但一种可能性是:

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

在这种情况下,是一个由两个指向stringchar 的指针组成的数组,并且赋值将它们设置为指向您之前定义的每个字符串的第一个字符。

由于您已将其标记为 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 回答
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 回答