找到C中最长的单词

时间:2017-05-28 05:19:36

标签: c arrays string

我希望通过获取命令行参数从字符串数组中找到最长的字符串。我可以接收命令行参数,但我的逻辑有什么问题?

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

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

    int i;
    char *c = argv[1];
    int maxSize = strlen(argv[1]);

    for(i=2;i<=argc;i++){
        int len = strlen(argv[i]);
        if(len>maxSize){
            maxSize = len;
            c = argv[i];
        }
    }

    printf("Max length string : %s", c);
}

3 个答案:

答案 0 :(得分:0)

您的循环正在运行数组外。

您似乎理解了argc和argv的含义,但您错过了argc是包含进程名称的输入参数的数量。

对于以下输入案例, 你将收到5为argc和最后一个参数字符串'flow',在argv [4]中找到。

a.out hello statck over flow

但是,您的代码将遇到argv [5],这不是argments的一部分,并且可能导致未定义的行为。

代码中的循环应该像

一样改变
for(i=1; i<argc; i++)
{
}

答案 1 :(得分:0)

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

int main(int argc, char *argv[]) {
    if (argc == 1) {
        printf("No arguments provided");
        return 1;
    }

    int maxLength = 0;
    int maxIndex = 0;

    int i;
    char* word;
    for (i = 1; i < argc; i++) {
        word = argv[i];
        int length = strlen(word);
        if (length > maxLength) {
            maxLength = length;
            maxIndex = i;
        }
    }

    printf("Max length is %d for string: %s\n", maxLength, argv[maxIndex]);
    return 0;
}

答案 2 :(得分:0)

以下是对您的代码的一些评论,希望它有所帮助。

enter image description here