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 < argcですfori < argcに変更する必要がありi < argc - 1ますfor

第二に、あなたはおそらくあなたが望む文字列を比較していないでしょう。argv[0]プログラムのパスを表す文字列です。プログラムに渡される最初の引数はですargv[1]。したがって、をに変更i = 0する必要があります 。fori = 1

最後に、最大の文字列のみforが必要な場合は、ループ内で印刷を行わないでください。むしろ、これまでに見つかった最大の文字列の長さとインデックスを格納する場所のようmax_lengthな2つの変数を作成する必要があります。max_length_idx次に、forループの後、プログラムは文字列を出力します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 に答える