1.在主函数中输入10个字符串,用另一个函数排序,在主函数中输出排好序的字符串;用指针数组处理;
解:首先要解决一个问题,怎么输入多个字符串?
//可以用指针数组保存多个字符串常量;
char *str[] = {"China","Japan","America",
"Korea","England","Germany",
"France","Russia","Singapore","Malaysia"};
//指针数组,其中的每一个元素都是指针,指向10个字符串常量的首地址;
//指针数组保存10个字符串常量的首地址;通过str[下标]可以输出字符串常量;
第二个要解决的问题是怎么交换两个字符串常量?
//交换两个字符串常量,通过交换指针指向的地址来交换两个字符串常量;
const char *str1 = "haha";
const char *str2 = "nihao";
printf("%s,%s\n",str1,str2);
const char *tmp = str1;
str1 = str2;
str2 = tmp;
printf("%s,%s\n",str1,str2);
第三个问题,怎么传递指针数组的参数?指针数组的形参是一个二级指针;
字符串排序用strcmp函数比较字符串的大小。
void StrSort(char **str,int len)//指针数组的形参是一个二级指针;
{
char *tmp;
int i;
for(i=0;i<len-1;i++)
{
for(int j=0;j+1<len-i;j++)
{
if(strcmp(str[j],str[j+1])>0)
{
tmp=str[j];
str[j]=str[j+1];
str[j+1]=tmp;
}
}
}
字符串排序的代码跟冒泡排序十分类似;可以类比一下;
冒泡排序:
冒泡排序(从小到大):两两比较,小的放前面,大的放后面;
第一趟(假设有n个数):比较n-1趟;
第二趟:比较n-2趟;
第n-1趟:比较n-(n-1)=1趟;
void BubbleSort(int *arr,int len)
{
int tmp;
for(int i=0;i<len-1;i++)
{
for(int j=0;j+1<len-i;j++)
{
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}