实验楼第四期楼赛

C语言之指针字符串数组
实验楼第四期楼赛是关于C语言的,共分为五大题,这是第一大题

题目:整理课程列表
介绍
冬瓜同学平时十分喜欢在实验楼学习新课程,每学完一节课就会将其记下。当学会的编程语言多了,就想整理汇总一下,看看自己的技术栈。
为了有序排列所有的编程语言,冬瓜决定使用冒泡排序对其进行排列。而字符串的比较方法使用的是字典序。如果不懂字典序,可以戳这里写链接内容。冬瓜同学完成了排序课程的代码片段,其中有一些错误和待填写部分需要你来帮助他完成。

#include<stdio.h>
#include<string.h>

char *courses[]={"C","C++","PHP","ASP","ASP.NET","C#","JAVA","BASIC","PASCAL","COBOL"};
void sort(char p[],int n)
{
    char *tmp;
    int i,j,k;
    for(i=0;i<n;++i){
        k=i;
        for(j=i;j<n;++j){
            if(?)
            k=j;
        }
        if(k!=j)
        {
            tmp=p[k];
            p[k]=p[i];
            p[i]=tmp;
        }
    }
 } 
 int main()
 {
    int n=strlen(courses);
    sort(courses,n);
    int i;
    for(i=0;i<n;++i)
    {
        printf("%s\n",courses[i]);

     }
     return 0;
 }

解题思路
这其实涉及到了指针字符串数组的知识,如果能够理解指针字符串数组的相关知识,还是挺简单的。首先共有两大难点,第一、 如何去判断两个字符串的大小问题,这个是因为字符串使用ascill编的码,所以用strcmp函数strcmp进行判断,然后再结合已经有的冒泡排序(感觉应该是选择排序才对),对字符串数组进行排序。第二、 如何解决n 的问题,一开始我还挺纳闷的,怎么就不能够正常输出呢,后来仔细研究了一下sizeof和strlen*区别和用法才发现大有问题,原题是采用的strlen来计算数组的长度的,但是这根本就不能够正常的求解出这个长度的,所以我采取了sizeof(数组名)/sizeof(类型)来进行求解,结果正确。附上源码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *courses[]={"C","C++","PHP","ASP","ASP.NET","C#","JAVA","BASIC","PASCAL","COBOL"};
void sort(char *p[],int n)
{
    char *tmp;
    int i,j,k;
    for(i=0;i<n;++i){
        k=i;
        for(j=i;j<n;++j){
            if((strcmp(p[k],p[j]))>0)
            k=j;
        }
        if(k!=j)
        {
            tmp=p[k];
            p[k]=p[i];
            p[i]=tmp;
        }
    }
 } 
 int main()
 {
    int n=sizeof(courses)/sizeof(char*);
    sort(courses,n);
    int i;
    for(i=0;i<n;++i)
    {
        printf("%s\n",courses[i]);

     }
     return 0;
 }

希望各位再接再厉哈,持续更新中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值