我刚刚学习了指针并尝试了教科书上的程序,
“声明大小为8的$
类型数组,要求用户输入a
字符串然后分配给数组。开发用户定义的
函数以非递减顺序对数组进行排序。打印阵列
在主函数中排序之前和之后。功能
原型给出为
char
“
我不清楚我犯了什么错误。
void arr_sort( char * cPtr)
答案 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
头文件中没有任何内容。
注意局部变量c
,d
和temp
对您发布的问题的评论涵盖了发布代码中的问题,因此我不会在此重复所有问题。
答案 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的指针数组。