3

我在比较 C 中的字符串时遇到了麻烦。首先,我需要从命令行参数中找到每个字符串的长度,然后比较它们并打印最大的字符串。

到目前为止,它只是打印每个输入字符串的长度。我需要根据长度而不是字母顺序来比较它们。

我不明白为什么它现在可以工作以及我应该怎么做才能解决它?谢谢!

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i, length;

    for(i = 0; i<argc; i++)
    {
        length = strlen(argv[i]);
        printf("%s %d\n", argv[i], length);

        if(strlen(argv[i]) < strlen(argv[i+1]))
        {
            printf("%s is the biggest \n", argv[i+1]);
        }
        else
        {
            printf("%s is the biggest \n", argv[i]);
        }
    }
    return 0;
}
4

3 回答 3

8

您的代码存在一些问题。

首先,argv[i+1]如果您i < argcfor. 您需要i < argci < argc - 1.for

其次,您可能没有比较您想要的字符串。argv[0]是代表程序路径的字符串;传递给程序的第一个参数是argv[1]. 因此,您需要将 i = 0中的更改fori = 1

最后,如果您想要最大的字符串,则不应在for循环中进行任何打印。相反,您应该创建两个变量,例如max_lengthmax_length_idx您将在哪里存储迄今为止找到的最大字符串的长度和索引。然后,在for循环之后,您的程序将打印出 string argv[max_length_idx]

于 2012-07-04T19:39:08.200 回答
4
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
   int i, max_length, max_index;

   max_index = 0;
   max_length = strlen(argv[0]);

   for(i = 1; i < argc; i++)
   {
        if(strlen(argv[i]) > max_length)
        {   
            max_length = strlen(argv[i]);
            max_index = i;
        }
    }

   printf("The longest is: %s with length equal: %d\n", argv[max_index], max_length);

   return 0;
}
于 2012-07-04T19:42:53.460 回答
0

这不会出现段错误...

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i, length;

    for(i = 0; i<argc - 1; i++)
    {
       length = strlen(argv[i]);
       printf("%s %d\n", argv[i], length);

    if(strlen(argv[i]) < strlen(argv[i+1]))
    {
       printf("%s is the biggest \n", argv[i+1]);
    }
    else
    {
       printf("%s is the biggest \n", argv[i]);
    }
   }
 return 0;
 }
于 2012-07-04T19:47:21.037 回答