timwillow 发表于 2020-6-9 19:47:11

小白请教

/*#############################################*/
/*输入若干书名,每个书名长度不超过100,将书按ASCII顺序,从小到大排序。
请注意:这些书名中可能有空格。
第一个为字符串个数m,然后输入m个书名。
出将字符串按ASCII码从小到大排序后输出。*/
/*#############################################*/
#include<stdio.h>
#include<string.h>
int main()
{
        char a;
        char b;
        int m,i,k;
        scanf("%d",&m);
        i=0;
        for(i=0;i<m;i++)
        {
        gets(a);
        }
        for(i=0;i<m;i++)
        {
        for(k=i;k<m+1;k++)
{
        if(strcmp(a,a)>0)
        {
        strcpy(b,a);
        strcpy(a,a);
        strcpy(a,b);
        }
}
}
for(i=0;i<=m;i++)
        puts(a);
        return 0;
}
为什么没有实现从a开始赋值?

永恒的蓝色梦想 发表于 2020-6-9 19:51:38

还用 gets 呢?

小甲鱼的铁粉 发表于 2020-6-9 20:20:41

strcmp(a,a)是恒等于0的把

小甲鱼的铁粉 发表于 2020-6-9 20:25:39

#include<stdio.h>
#include<string.h>
int main()
{
      char a;
      char b;
      int m,i,k;
      scanf("%d",&m);
      i=0;
      for(i=0;i<m;i++)
      {
      scanf("%s",a);
      }
      for(i=0;i<m;i++)
      {
      for(k=i+1;k<m;k++)
{
      if(strcmp(a,a)>0)
      {
      strcpy(b,a);
      strcpy(a,a);
      strcpy(a,b);
      }
}
}
for(i=0;i<=m;i++)
      printf("%s",a);
      return 0;
}

小甲鱼的铁粉 发表于 2020-6-9 20:33:06

这样就可以了,楼主你使用gets的话还是需要用一个getchar来吃掉'\n'的,还有k应该是=i+1的
#include<stdio.h>
#include<string.h>
int main()
{
      char a;
      char b;
      int m,i,k;
      scanf("%d",&m);
      i=0;
      getchar();
      for(i=0;i<m;i++)
      {
      gets(a);
      }
      for(i=0;i<m;i++)
      {
      for(k=i;k<m+1;k++)
{
      if(strcmp(a,a)>0)
      {
      strcpy(b,a);
      strcpy(a,a);
      strcpy(a,b);
      }
}
}
for(i=0;i<=m;i++)
{
      printf("%s\n",a);
      return 0;
}

小甲鱼的铁粉 发表于 2020-6-9 20:33:43

给个最佳{:10_256:}
页: [1]
查看完整版本: 小白请教