C语言:指针3(英文单词排序)

题目描述

输入多个英文单词,保存到字符串数组中,按照字母顺序从小到大输出。
要求:编写函数 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; 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值