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