2

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

#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

4 回答 4

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]);
于 2012-10-16T18:31:00.490 回答
2

你的问题在这里:

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

您似乎max对这里的用途有些困惑。你真正想做的是:

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

尝试将其转换为 C 代码并发布您的想法。

于 2012-10-16T18:27:43.997 回答
0

你的意思是:

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

for (i = 0; i < argc; ++i) 
{
    if (max < strlen(argv[i]))
    {
        max = strlen(argv[i]);
    }
}
于 2012-10-16T18:27:48.747 回答
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
    }
}
于 2012-10-16T18:29:30.807 回答