2012-10-16 127 views
1

给定任意数量的程序参数输入命令行,计算每一个的长度,最后输出最长的字符串。这是我的代码,但它似乎是错误的。打印出最长的字符串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; 
} 
+0

你想做什么? – Afaq

+13

伙计们,让我们不要用一堆downvotes/closevotes击败那个家伙。他想做的事情很清楚。他显然是初学者,但这不是犯罪。 –

+0

你在if语句中有一个错误,你应该使用short而不是char(只是为了保持代码可读)。你能解释**为什么**代码看起来不对? – elyashiv

回答

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

+1正确的方式,而不仅仅是纠正问题 – cegfault

+0

我想作为结果输出字符串,我已经更新我的脚本。但我认为我做了错误 –

+0

@StevenLiu然后你需要跟踪argv数组中最长字符串的索引,而不仅仅是它的长度。请参阅编辑。 – 2012-10-16 19:04:09

2

您的问题是在这里:

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

你似乎是有点困惑什么max是在这里。你真正想要做的是:

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

尝试将其转换为C代码并发布你想出的内容。

0

您是不是要找:

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

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

另外,max可能应该是一个int,而不是char(字符串可以超过255个字符) – cegfault

+0

@cegfault它实际上应该是一个'size_t'。 – 2012-10-16 18:29:39

+1

@ H2CO3:是的,你说得对。但是看到OP对'char'和'int'没有很好的理解,我不想通过在构造中放入'size_t'来混淆他,然后他才会获得基础知识。 – cegfault

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 
    } 
}