c语言冒泡排序法例子(用C语言实现字符串的冒泡排序)

我们都很清楚冒泡排序,光冒泡排序我已经讲了好几节,就是给定一组数据,这组数据两两比较大小,然后交换位置,最终将结果按从小到大排序。

那么今天这道题目呢,正如标题所说:将冒泡排序用于字符串,给定任意的整数K和N,打印输出扫描第K遍后的中间结果数列,K要满足大于等于1,小于N,N要满足小于等于100,此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

c语言冒泡排序法例子(用C语言实现字符串的冒泡排序)(1)

梳理逻辑

1、输入整数N和K,用到一个scanf函数。

2、因为要用于字符串序列,而且是不停地输入字符串,所以我们可以使用二维数组来存储字符串,为什么使用二维数组呢,因为二维数组有多行,这里正好要输入N个字符串,所以二维数组也能存储多个字符串,而且它要求每行包含一个长度不超过10的,且仅由小写字母组成的非空字符串。

至于长度不超过10,只需要用一个二维数组满足列为11即可,这样就能保证长度不超过10,而仅由小写字母组成的话,需要用到一个#include<ctype.h>库当中的islower函数,当islower函数等于零的时候,就说明该字符串中有大写字母,要重新输入。

for(int i=0; i < N;i ){ if(islower(bubble[i]==0)){//如果字符串中有大写字母,就重新输入 scanf("%s",bubble[i]); } }

3、最关键的就是比较字符串大小,比较字符串大小该如何来理解呢,我在做这道题目的时候,我一开始理解错了,以为比较字符串大小是比较字符串的长度多少,结果在验证之后发现,得不到题目期望的结果,于是我开始考虑。

之后发现,C语言中有一个strcmp函数,是专门用来比较字符串大小的,如果第一个字符串和第二个字符串大小相同,则返回零,如果第一个字符串比第二个字符串小,则返回小于零,如果第一个字符串比第二个字符串大,则返回大于零。

c语言冒泡排序法例子(用C语言实现字符串的冒泡排序)(2)

4、除了用到strcmp函数外,我们还要用到另一个函数来交换两个字符串之间的位置,当然,这里与数字的冒泡排序相同,自然是要定义一个临时变量来存储字符串的,用到的复制函数则是strcpy,能够把第二个字符串的内容给复制到第一个字符串当中,然后覆盖第一个字符串中的所有内容。

5、打印输出要换行,自然还是用到一个计数法。

代码实现

//字符串的冒泡排序 #include<stdio.h> #include<string.h> #include<ctype.h> int main(){ int N;//N个整数 int K;//扫描K遍 scanf("%d %d", &N,&K);//第一行给出N和K char bubble[10][100]; char Temp[100];//Temporary Variable,一个临时变量来存储元素 int count = 0;//计数法 if(K>=N){ scanf("%d %d", &N,&K);//第一行给出N和K } if(N>100){ scanf("%d %d", &N,&K);//第一行给出N和K } if(K<1){ scanf("%d %d", &N,&K);//第一行给出N和K } for(int i=0; i < N;i ){ scanf("%s",bubble[i]); } for(int i=0; i < N;i ){ if(islower(bubble[i]==0)){//如果字符串中有大写字母,就重新输入 scanf("%s",bubble[i]); } } for(int j = 0; j < K; j ){ for(int i = 0; i < N-1; i ){ if(strcmp(bubble[i],bubble[i 1])>0){//比较前一个字符串和后一个字符串的大小 strcpy(Temp, bubble[i 1]); strcpy(bubble[i 1], bubble[i]); strcpy(bubble[i], Temp);//交换位置 } } } for(int q = 0; q < N;q ){//打印输出最终结果 if(count!=0){ printf("\n"); } printf("%s", bubble[q]); count ; } }

结果测试

c语言冒泡排序法例子(用C语言实现字符串的冒泡排序)(3)

c语言冒泡排序法例子(用C语言实现字符串的冒泡排序)(4)

总结

这两天的内容都是围绕字符串的函数来讲的,关键还是C语言当中的有些特定库函数要熟悉,熟悉之后解决题目也会比较方便。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页