题目描述
输入多个英文单词,保存到字符串数组中,按照字母顺序从小到大输出。
要求:编写函数 void strsort (char *s[], int n),对字符指针数组 s 中的 n 个单词排序。
输入
多个英文单词(不超过100个单词,每个单词长度<30)。
输出
字母顺序从小到大显示。
样例输入
one two three four
样例输出
four one three two
我写这段代码时主要卡在了这几点:
1.将字符串赋给指针数组并限制字符串长度;
2.在赋值的同时记录字符串个数;
3.对字符串按首字母升序排列并输出;
4.将指针数组赋到函数中去;;
5.以及总是出现的segmentation fault。(还没找到原因)
解决方法:
最最最主要的问题是不会用字符串处理函数<string.h>
strcmp(string compare字符串比较)用法:strcmp(str1,str2)
若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
strcpy (string copy将后面的字符串到'\0'且包括'\0'的部分,复制到前面的数组中) 用法: strcpy(数组1,数组2)
1.定义一个二维的字符数组,赋值并将此数组赋给指针数组
char a[100][30];
char *s[100];
2.
int n=0;
while(scanf("%s",&a[n])!=EOF)
n++;
3.用strcmp比较
4.主函数中调用函数时的声明:函数名(指针数组名)
调用函数中的声明:类型 函数名(指针数组类型 * 数组名[])
完整代码如下:
#include<stdio.h>
#include<string.h>
void st(char* s[],int n)
{
char a[30];
int i,j,p;
for(i=0;i<n-1;i++)//循环排列
{
p=i;
for(j=i+1;j<n;j++)//找最大
{
if(strcmp(s[p],s[j])>0)
p=j;
}
strcpy(a,s[p]);
strcpy(s[p],s[i]);
strcpy(s[i],a);
}
}
int main()
{
char a[100][30];
char *s[100];
int n=0,i;
while(scanf("%s",&a[n])!=EOF)
n++;
for(i=0;i<n;i++)
s[i]=a[i];
st(s,n);
for(i=0;i<n;i++)
puts(s[i]);
return 0;
}