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;
}
希望各位再接再厉哈,持续更新中。。。