程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 【C語言】對5個國家的名稱進行排序詳細解析,排序

【C語言】對5個國家的名稱進行排序詳細解析,排序

編輯:關於C語言

【C語言】對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],否則會出錯。

總結:要明確字符串指針的原理,通過構建指針數組來進行字符串指針直接的順序互換,套用一維數組的排序方法就可以進行字符串指針的排序,達到目的。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved