7-1 字符串排序

7-1 字符串排序

输入n个字符串(n<=10,每个字符串长度均小于20),按照从小到大的顺序输出这些字符串。

输入格式:

第一行输入一个整数n;接下来的n行输入n个字符串。

输出格式:

输出n个字符串,每行1个串。

输入样例:

在这里给出一组输入。例如:

5
China
Mongolia
Korea
Japan
Philippines

输出样例:

在这里给出相应的输出。例如:

China
Japan
Korea
Mongolia
Philippines

个人思路:

题目要求输入n个字符串,首先我们需要输入一个n的值 ,但是如何输入n的字符串呢?

输入一个字符串可以写成char s[]这里表示输一个字符串,s[]在这里确实就是一个指针,s[]就是一个指向字符串s的首个数组的地址,那如果是n个字符串就可以写成:s[n][20]这样来表示,后面写20是因为题目说明了字符串不会超过20.

#include<stdio.h>
int main()
{
    int n;
    scanf("%d\n",&n);
    char s[n][20];
  
}

然后在输入每一个字符串下面是错误示范:

#include<stdio.h>
int main()
{
    int n;
    scanf("%d\n",&n);
    char s[n][20];
    for(int i=0;i<n;i++)
    {
      gets(s[i][20]);
    }
}

在C语言中,二维字符数组s[n][20]表示一个包含n个字符串的数组,每个字符串的最大长度为20。当我们使用s[i]时,它表示第i个字符串,而s[i]本身就是一个指向该字符串的指针。

因此,在gets(s[i]);语句中,我们应该使用s[i],而不是s[i][20]。因为s[i]本身就是一个指向字符串的指针,gets;会将输入的字符串存储到s[i]指向的位置。

所以,gets语句应该是gets(s[i]);而不是gets(s[i][20]);

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d\n",&n);
    char s[n][20];
    for(int i=0;i<n;i++)
    {
 
        gets(s[i]);
    }

成功存取全部字符串以后就可以用数组来比较他们之间的大小了,字符串之间的比较这里直接用c语言里的一个库函数strcmp,这里需要引入头文件:string.h

strcmp(s1, s2); 如果s1=s2那么就返回0,如果s1大返回1,s2大就返回-1。

下面我采用的是冒泡排序

   完整代码:

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d\n",&n);
    char s[n][20];
    for(int i=0;i<n;i++)
    {
 
        gets(s[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(strcmp(s[j],s[j+1])>0)
            {
                char t[20];
                strcpy(t,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],t);
                
                
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%s\n",s[i]);
    }
}

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值