【问题标题】:string initialization in CC中的字符串初始化
【发布时间】:2012-10-23 04:16:38
【问题描述】:

我正在使用字符串编写插入排序。我有 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;
}

【问题讨论】:

  • 您的数组太小 - 没有空间用于空终止符。使用array1[] 来自动调整它们的大小。
  • 您的数组大小应为4,而不是3char string [2]; 应该是 char *string [2]; 我猜。
  • 你想连接这两个数组吗?还是你想创建一个数组?
  • 我的目标是创建字符串数组。在插入排序中我需要字符串数组。所以我想制作一个数组数组

标签: c string insertion-sort


【解决方案1】:

所以我需要写这个操作:

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

有可能吗?

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

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

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

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

由于您已将其标记为 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"};

【讨论】:

    【解决方案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 
    

    【讨论】:

    • 谢谢马克。我想我需要弄清楚如何让事情看起来像代码。给您带来不便,我深表歉意。
    【解决方案3】:

    当然不是。请记住,

        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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多