开发用户定义的函数,以非递减顺序对数组进行排序

时间:2017-12-26 19:07:00

标签: c

我刚刚学习了指针并尝试了教科书上的程序,

“声明大小为8的$类型数组,要求用户输入a 字符串然后分配给数组。开发用户定义的 函数以非递减顺序对数组进行排序。打印阵列 在主函数中排序之前和之后。功能 原型给出为 char

我不清楚我犯了什么错误。

void arr_sort( char * cPtr)

2 个答案:

答案 0 :(得分:0)

在C中为冒泡排序快速“谷歌”导致:

// where 'n' is the number of entries in the array
// where 'array' is declared as 'int array[n];
for ( int c = 0 ; c < ( n - 1 ); c++ )
{
    for ( int d = 0 ; d < n - c - 1; d++ )
    {
        if ( array[d] > array[d+1] ) /* For decreasing order use < */
        {
            int temp   = array[d];
            array[d]   = array[d+1];
            array[d+1] = temp;
        }
    }
}

注意索引变量上限的限制。

在您的计划中,您将使用char而不是int用于temp以及array[]

的声明

注意string.h头文件中没有任何内容。

注意局部变量cdtemp

范围的限制

对您发布的问题的评论涵盖了发布代码中的问题,因此我不会在此重复所有问题。

答案 1 :(得分:0)

for(i=0;i<7;i++) {
  scanf("%s",array);
}

如果你想要8个长度为7的字符串,则不能将它们扫描到数组中。您的数组是一个指针数组,如下所示:

char *array[8];

与此截然不同:

char array[8];

第一个是存储8个字符串指针的数组。第二个是存储8个字符的数组。如果你想存储一个字符串,你可以这样做:

char array[8];
printf("Please input a string with size 7: ");
scanf("%s", array);

这可能是你现在习惯的。

因此,一个指针数组就像一个指向内存块的小箭头列表。您的数组本身不存储任何字符,这就是您无法直接扫描到它的原因。

int main(void) {
  char *arr[8];
  char new_word[8];

  for(int i = 0; i < 8; i++) {
    printf("Enter a new word of length 7: ");
    scanf("%s", new_word);
    arr[i] = malloc(strlen(new_word) + 1);
    strcpy(arr[i], new_word);
  }
  for(int i = 0; i < 8; i++) {
    printf("%s\n", arr[i]);
  }

  return 0;
}

该程序创建两个数组:指针数组(arr)和字符数组(new_word)。在循环中,您要求七个长度为7的字符串,这些字符串将扫描到字符数组中。使用malloc为该字符串留出新内存。然后,将字符串复制到第一个数组指针指向的内存块中。我们使用for循环增加数组索引,以便现在我们使用下一个指针,依此类推。

使用strcpy并且每次都要从字符数组中复制字符串很重要,否则最后,你将只有一个指向一个字符串new_word的指针数组。