今天我试着对一个多维数组进行排序,但我不知道为什么它不能工作。
该算法对第一个字母进行交换,但不交换整个字符串。下面是一个工作的演示,它显示算法按字母顺序打印找到的每个字符串的首字母。
用于交换整个字符串的算法--不仅仅是第一个字母--不起作用:
#include <stdio.h>
#include <string.h>
int main(void){
char arr[][10] = {"Michael" , "Tanja" ,"Adda", "Jenny", "Kimberly", "Walter" , "Donna"};
size_t length = sizeof arr / sizeof *(arr + 0);
unsigned int i,j, k=0;
char *tmp;
for (i = 0 ; i < length-1; i++){
for (k = 0 ; k < length-i-1; k++){
if (arr[k][0] > arr[k+1][0]){
tmp = arr[k];
strcpy(arr[k], arr[k+1]);
strcpy(arr[k+1], tmp);
}
}
}
printf("Sorted Array:\n");
for ( j = 0 ; j < length ; j++ ){
printf("%s ", arr[j]);
}
printf("\n\n");
return 0;
}
我得到的输出是:
Adda Adda Adda Donna Donna Donna Donna
它应该是:
Adda Donna Jenny Kimberly Michael Tanja Walter
发布于 2015-12-31 15:40:53
tmp
只是一个指针。因此,在赋值tmp = arr[k];
和随后的strcpy()
期间,由于arr[k]
被arr[k+1]
覆盖而丢失了。但是您需要在交换期间复制字符串。所以使用一个缓冲区:
char tmp[256];
和
strcpy(tmp , arr[k]);
strcpy(arr[k], arr[k+1]);
strcpy(arr[k+1], tmp);
发布于 2015-12-31 15:43:06
tmp = arr[k];
由于tmp
指向arr[k]
,在将arr[k+1]
复制到arr[k]
中并在后者中复制tmp
之后,您将得到与arr[k]
本身相同的值(tmp
指向该修改的值)。
你可以这样做-
char tmp[20];
strcpy(tmp,arr[k]);
https://stackoverflow.com/questions/34548524
复制相似问题