编写一个程序,从用户读取4个名称,并比较长度以找到长度最小的两个(strlen)。然后按字母顺序比较这两个中的哪一个并打印出第一个按字母排序的字母。
我一直在努力比较4个字符串..结果必须是至少2个...而不仅仅是一个。第二部分很简单,一旦找到最少2个,我就可以使用strcmp。
有关更多插图,让我们说一个用户放4个名字..雅各布,阿尔弗雷德,Rues,Reigns。我想要一个使用基本strlen查看最短2个长度的程序。任何帮助?
idk为什么我这么快下来投票lol u.u你们这么吝啬:P
我尝试嵌套如果条件..但这是一个可怕的想法..
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main () {
char a[30],b[30],c[30],d[30];
gets(a);
gets(b);
gets(c);
gets(d);
if (strlen(a)<strlen(b)&&strlen(a)<c) //Not successful because d is left.
getch();
}
答案 0 :(得分:1)
使用qsort。 http://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm 它可以根据您编写比较函数的任何标准对数组进行排序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *a, const void *b)
{
printf("compare %s %s\n",a,b);
int sa = strlen((const char*)a);
int sb = strlen((const char*)b);
if (sa != sb)
{
return sa - sb;
}
return strcmp((const char*)a,(const char*)b);
}
int main()
{
char str[][100] = { "Jacob", "Alfred", "Ruess", "Reigns" };
int length = sizeof(str) / 100;
qsort(str, length, 100, compare);
int firstLen = strlen(str[0]);
for ( index= 0 ; index < 4 ; index++ )
{
if (strlen(str[index]) != firstLen)
{
break;
}
printf("%s\n",str[index]);
}
}
答案 1 :(得分:0)
让
char s1[100],s2[100],s3[100],s4[100];
是4个字符串,然后让
int a,b,c,d;
a=strlen(s1);
b=strlen(s2);
c=strlen(s3);
d=strlen(s4);
是4个长度。
然后你可以轻松地使用if语句找到最短的两个,一旦你找到它们,你知道a
包含s1
的长度,所以如果a
是最小的,你知道s1
的长度最小,所以你可以用if语句来实现这个部分(你应该自己尝试这个部分,因为这是一个功课问题,也因为它不是那么难,所以自己动手会给你有更多的经验,而不仅仅是复制粘贴别人的代码)
然后,正如您已经说过的,您知道如何按字母顺序排列它们,您必须实现它。
嗯,这只是4个字符串的情况。如果你有更多,那么这是一个完全不同的方法(提示:使用数组)
这是一个不太难实现的简单算法
strcmp()
的字母比较。在看到您发布的代码后,将长度存储在4个变量中比使用strlen()
多次更容易(这将有助于您更轻松地实现代码)。
答案 2 :(得分:0)
我们如何为您提供想法并编写代码?听起来不错?
所以,这就是你需要做的事情。
strlen()
一次并保存它们的长度。strcmp()
。当strcmp(s1, s2)
返回时
如果发现s1(或其前n个字节)小于,等于或大于零,则小于,等于或大于零的整数小于,匹配或大于s2。
你将拥有 alphabatically 更小(或更大)的字符串。