• 对5个国家的名称进行排序详细解析


    注:代码通过TDM-GCC4.9.2编译通过

    原题:有"China","America","Australia","France","Germany"五个国名。设计一个程序使其按字母顺序进行排序并输出结果。

    思路:应用传统的排序方法,将字符串保存在字符数组中进行交换,将使得程序变得复杂,难于编写检查。可以将其都保存在字符串指针数组中。排序时只要套用原来一维数组的排序方法,将两个字符串指针在指针数组中的顺序进行交换,程序就变得十分简单。

    设计:编写2个自定义函数:void sort(char *name[])用于排序,void prins(char *put[])用于输出。在main()函数中对字符串进行赋值,并且依次调用两个自定义函数,完成设计。

    代码:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define N 5 
     5 
     6 void sort(char *name[]) //排序
     7 {
     8     int i,j;
     9     char *sp; //用于临时交换
    10     for(i = 0;i < N-1;i++) //利用选择排序法进行排序
    11     {
    12         for(j = i+1;j < N;j++)
    13         {
    14             if(strcmp(name[i],name[j]) > 0)
    15                         { //当name[i]>name[j]时进行交换来排序①
    16                 sp = name[i];
    17                 name[i] = name[i+1];
    18                 name[i+1] = sp;
    19             }
    20         }
    21     }
    22 }
    23 
    24 void prins(char *put[]) //输出
    25 {
    26     int i;
    27     for(i = 0;i < N;i++)
    28         printf("%s ",put[i]); //不能写*put[i]②
    29 }
    30 
    31 int main() {
    32     char *spa[] = {"China","America","Australia","France","Germany"};
    33     sort(spa);
    34     prins(spa);
    35     getch();
    36     return 0;
    37 }                    

    运行结果:America Australia China France Germany

    解释:①strcmp(str1,str2)中,

    当str1 > str2时,函数值 > 0;

    当str1 = str2时,函数值 = 0;

    当str1 < str2时,函数值 < 0;

       ②因为put[i]是一个字符串指针,字符串指针指向一个字符常量的地址,由printf()的函数原型可知这里不能用*put[i],否则会出错。

    总结:要明确字符串指针的原理,通过构建指针数组来进行字符串指针直接的顺序互换,套用一维数组的排序方法就可以进行字符串指针的排序,达到目的。

  • 相关阅读:
    BZOJ 3626: [LNOI2014]LCA(树链剖分+离线处理)
    python备用
    STL的使用。。备忘
    DP专题
    任务
    hdu 网络流题集
    hdu KM匹配题集
    hdu 差分约束题集
    hdu 2sat题集
    Codeforces Round #261 (Div. 2)
  • 原文地址:https://www.cnblogs.com/mrblug/p/5706990.html
Copyright © 2020-2023  润新知