C语言经典例79-字符串排序
生活随笔
收集整理的這篇文章主要介紹了
C语言经典例79-字符串排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1 題目
- 2 分析
- 3 實現
- 4 運行結果
1 題目
字符串排序,輸出三個字符串(長度小于20),并將其按照ASCII碼順序排序。
2 分析
首先限制三個字符串的輸入,本例利用fgets函數,該函數的原型為:
char *fgets(char *str, int n, FILE *stream)- str : 這是指向一個字符數組的指針,該數組存儲了要讀取的字符串。
- n : 這是要讀取的最大字符數(包括最后的空字符)。通常是使用以 str 傳遞的數組長度。
- stream : 這是指向 FILE 對象的指針,該 FILE 對象標識了要從中讀取字符的流。
其中字符串的長度可以通過sizeof技巧來計算即數組總大小/單個項大小,就是總長度sizeof str1 / sizeof str1[0],stream則為標準輸入流stdin
由于本例中只有三個字符串,很容易想到之前做過的三個數的大小比較, 是通過三個if語句判斷的,在本例中如何判斷字符串大小呢?實際上C語言string.h頭文件中包含了字符串比較函數strcmp,它的函數原型如下:
int strcmp(const char *str1, const char *str2)其中str1和str2是要比較的兩個字符串,它的返回值如下:
- 如果返回值小于 0,則表示 str1 小于 str2。
- 如果返回值大于 0,則表示 str2 大于 str1。
- 如果返回值 = 0,則表示 str1 等于 str2。
該函數的實現原理是通過比較ASCII碼值來實現的。
在比較兩個字符串大小后,則要交換兩字符串,這里可以使用strcpy字符串復制函數來實現,它的原型如下:
功能就是將src中的內容復制到dest中。
3 實現
#include <stdio.h> #include <stdlib.h> #include <string.h>void swap(char*str1, char*str2);int main() {char str1[20], str2[20], str3[20];printf("請輸入3個字符串,每個字符串以回車結束:\n");fgets(str1, (sizeof str1 / sizeof str1[0]), stdin);fgets(str2, (sizeof str2 / sizeof str2[0]), stdin);fgets(str3, (sizeof str3 / sizeof str3[0]), stdin);if (strcmp(str1, str2) > 0) {swap(str1,str2); // 比較str1和str2}if (strcmp(str2, str3) > 0) {swap(str2,str3); // 比較str2和str3}if (strcmp(str1, str2) > 0) {swap(str1,str2); // 比較str1和str2}printf("排序后的結果為:\n");printf("%s%s%s", str1, str2, str3);return 0; }void swap(char *s1, char *s2) {char t[20];strcpy(t, s1);strcpy(s1, s2);strcpy(s2, t); }4 運行結果
請輸入3個字符串,每個字符串以回車結束: def abc bed 排序后的結果為: abc bed def總結
以上是生活随笔為你收集整理的C语言经典例79-字符串排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言经典例76-根据n的奇偶性累加
- 下一篇: C语言经典例80-猴子分桃