打印出c中最长的字符串

时间:2012-10-16 18:24:51

标签: c

给定输入命令行的任意数量的程序参数,计算每个参数的长度,最后输出最长的字符串。这是我的代码,但似乎是错误的。

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

int main(int argc, char *argv[]) {
  size_t maxlen = 0, len;
  int i;
  int longest;


  for (i = 1; i < argc; i++) {
   len = strlen(argv[i]);
     if (len > maxlen) 
       longest = argv[i];
  }

  printf("The longest string is %s. \n", longest);

  return 0;
}

4 个答案:

答案 0 :(得分:4)

错误:

一。 char max; ... max = strlen(argv[i]);错了; strlen()返回size_t而不是char

二:if(max < argv[i])也错了,你将字符串的长度与指向字符串的指针进行比较。这甚至没有意义。您可能想要的是

size_t maxlen = 0, len;
int i, maxindex = 0;

for (i = 1; i < argc; i++) {
    len = strlen(argv[i]);
    if (len > maxlen) {
        maxlen = len;
        maxindex = i;
    }
}

printf("The longest string is '%s'\n", argv[maxindex]);

答案 1 :(得分:2)

你的问题在这里:

max = strlen(argv[i]);
if(max < argv[i])
{
  max=argv[i];
}

你似乎对max在这里的含义感到有些困惑。你真正想做的是:

  • strlen(argv[i]),并将其存储在变量
  • 检查是否大于max
  • 如果是,请将其存储在max

尝试将其翻译为C代码并发布您的内容。

答案 2 :(得分:0)

你的意思是:

int i;
int max = strlen(argv[0]);

for (i = 0; i < argc; ++i) 
{
    if (max < strlen(argv[i]))
    {
        max = strlen(argv[i]);
    }
}

答案 3 :(得分:0)

int max = 0;//assuming  initial max length of 0. start loop from index 1 (index 0 is program name)
for(i = 1; i < argc; ++i) {

    int len = strlen(argv[i]);//get length of str
    if(max < len )
    {
       max=len;//store the new max length
    }
}