回 帖 发 新 帖 刷新版面

主题:大大们进来帮帮忙啊.....谢了

/*输入3个字符串求出其中最大的*/
#include"stdio.h"
main()
{
char a[3][20];
char b[20];
int i;
printf("please input ;\n");
for(i=0;i<3;i++)
  gets(a[i]);
  if(strcmp(a[0],a[1])>0 )
     strcpy(b,a[0]);
  else
     strcpy(b,a[1]);
    if(strcmp(a[2],b)>0)
          strcpy(b,a[2]);
            puts(b);
     

}/*怎么样才能把程序改成任意输入几个字符串求其中最大的*/
我学C才不到一周请大大门用比较通俗的语言描述,指针那些就不用了看不懂。。谢了

回复列表 (共13个回复)

沙发

其实你的问题应该被归类为求完整代码,应该是被结贴的……

思路篇:
你想输入任意个字符串的话用什么来结束呢?这点请先想好

思路其实不难,就是不把每个串都保存下来,只存当前输入的和到目前为止最大的
抽象流程:

定义空串a和b
循环:
    输入字符串a
    如果字符串a比字符串b大,把a字符串的内容拷贝给b字符串
输出b字符串

板凳


[em7]我小白嘛不知道,,,其实我也是想求个思路,谢谢斑竹。。。。

3 楼

我觉得我的思路已经很浅显清晰了
你试试完善思路写出代码吧,写完有问题的话大家给你改

4 楼


#include<stdio.h>
main()
{
  int a,b;
  scanf("%d",&a);
  b=a;
  while (scanf("%d",&a)!=0)
  if(a>b) b=a;
  printf("   %d   ",b);
  
}用这种思想可以解决了吧。。。嘎嘎。。。我是小白菜。。

5 楼


#include<stdio.h>
main()
{
  char a[100],b[100];
     scanf("%s",a);
  strcpy(b,a);
     while(strcmp(a,"0")!=0)
     {
  scanf("%s",a);
     if (strcmp(a,b)>0)
     strcpy(b,a);
 }
  printf("%s\n",b);
}我现在顶多就能编成这样了。。。。。斑竹给点意见。。3Q

6 楼

随便在你的基础上写了个。要是要更多,define里面改N就成。这里只能比较99个,因为在输入的时候以NULL为结尾的,它也得占一个呢。
#include"stdio.h"
#define N 100
main()
{
char a[N][20];
char b[20];
int i;
printf("please input string:\n");
for(i=0;i<N;i++)
{gets(a[i]);
if(strcmp(a[i],NULL)!=0)
break;}
strcpy(b,a[0]);
i=1;
while(i<N)
{if(strcmp(a[i],NULL)!=0)
    {if(strcmp(a[i],b)) strcpy(b,a[i]);}
    else break;
i++;}
puts(b);
}
思路就是多了个在输入为空时跳出输入,然后再后面比较时,碰到为空的a【i】跳出循环。
比较乱,大家指点啊,谢谢了

7 楼

雪光风剑的思路很好,程序比我的简单多了
不好意思,刚刚看到啊,又献丑了一次,呵呵

小白,你可以用雪光风剑的思路些个好的。
提示:输入为空时跳出输入……
然后你直接就可以输出最大的了。郁闷啊,我怎么就没想到这么简单的呢

8 楼

楼主,你的程序都有个问题,好像只能输入一个字符串,然后就没的比较了

9 楼

注意如果想用scanf读%s,那么字符串里是不能有空格的,如果想读有空格的字符串要注意用gets
如果不读空格,那么建议用" %s"的格式来过滤过多的换行符

10 楼

[quote]楼主,你的程序都有个问题,好像只能输入一个字符串,然后就没的比较了[/quote]
可以啊,可以比交小于等于99个字符串,我是输入为0是结束的,不过永宏定义确实比较好改,谢谢指教。。。小白谢过了

我来回复

您尚未登录,请登录后再回复。点此登录或注册