用指向指針的指針的方法對5個字符串排序並輸出
解題思路:指向指針的指針其實就是二級指針,使用二級指針的保存一級指針的地址,讓這個一級指針指向具體的數據空間; 定義一個字符串指針數組包含5個元素,每個元素可以保存一個字符串的首地址,而這個地址指向的是具體的字符串數據空間,通過指針訪問實現對指向空間內的字符串進行比較排序交換即可。
答案:
#include<stdio.h>
#include<string.h>
void sort(char *s[10])
{
int i, j;
for (i = 0; i < 10; i++){
for (j = i; j < 10; j++){
if (strcmp(s[i], s[j])> 0){//s[i]保存的就是一個字符串的首地址
char *tmp = s[i]; //指針的好處在於直接通過賦值可以改變指向
s[i] = s[j]; //只要交換了字符串的地址就實現了字符串的交換
s[j] = tmp;//因此通過指針指向的交換就能夠實現數組中字符串的排序
}
}
}
}
int main()
{
char *str[5];//定義字符串指針數組,可以分別保存指向5個字符串所在空間首地址
printf("Please enter five strings:\n");
for (int i = 0; i < 5; i++) {
str[i] = malloc(32);//為每一個指針分配空間
scanf_s("%s", str[i], 32);
}
sort(str);
printf("\n");
for (int i = 0; i < 5; i++){
printf("%s\n", str[i]);
free(str[i]);
}
system("pause");
return 0;
}