1

ユーザーからの入力を取得し、それらの 10 個の文字列から最長の入力を見つける必要があります..

#include<stdio.h>
#include<conio.h>

void main() {
char str[10][10]
printf("Enter strings:")
scanf("%s", str)

}

このようなユーザー入力を取得すると、文字列は str 2 次元配列に格納されますか? 最初に最長の文字列を見つけるには、各文字列の長さを見つけ、max_length 関数を使用して最長の文字列を決定します。

4

6 に答える 6

5

すべての文字列を保存する必要はありません。これまでに入力した最長のものだけを保存してください。バッファ オーバーランを避けるために、文字列の最大長を定義する必要があることに注意してください。

例えば:

#define MAX_STRING_SIZE 1024

char last_entered_string[MAX_STRING_SIZE];
char longest_entered_string[MAX_STRING_SIZE] = ""; /* Must be initialized. */

scanf("%1023s", last_entered_string); /* Read one less to allow for
                                         null terminator. */

ループを使用して 10 個の入力を受け入れ、最も長い文字列と比較します。最後に入力した文字列が長い場合は、それを最も長い文字列にコピーします。これは宿題なので、これ以上のコードは提供しません。

于 2012-09-21T10:08:08.970 に答える
1

いいえ、そうはなりません。すべての文字列をループして読み取る必要があります。

for(i=0;i<10;i++)
scanf("%s", str[i]);

また、いくつかのセミコロンがありません!

于 2012-09-21T10:09:07.083 に答える
0

すべての入力を配列に格納qsort()し、配列エントリの長さでそれを実行してから、最初の(またはソート方法によっては最後の)エントリを取得します。

わかりました、わかりました...-これは過剰に設計されている可能性があります... ;-)

于 2012-09-21T10:24:48.187 に答える
0

'\0'できることは、ネストされたループを使用して、行内の文字を検索し、同時にカウンターを実行することだと思います。カウンターを見つけたらすぐに'\0'停止し、カウンターの値を別の配列に保存します。これで、10 個の整数の配列が得られます。配列内の最小の整数を検索すると...ビンゴ!対応する行には、最も短い文字列が含まれます。このアプローチが非常に生々しいことは承知していますが、C の基本的な知識しかない人には役立つと思います。

于 2012-09-21T12:21:19.453 に答える
0

提示されたプログラムは、ユーザーから 10 個の入力文字列を受け取り、最後に最も長い文字列とその長さを出力します。最大のもの以外の入力文字列は保存されません。

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

#define MAX_STR_LEN 1024

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

    char str_final[MAX_STR_LEN];
    char str_temp[MAX_STR_LEN];
    unsigned int i, j, len_str;
    unsigned int num_string = 10;
    unsigned int len_max = 0;

    for (i=0; i<num_string; i++){
        printf("Enter string number: %d\n", i);
        gets(str_temp);

        for (j=0; str_temp[j]; j++);
        len_str = j;

        if(len_str > len_max){
            len_max = len_str;
            memset(str_final, 0, MAX_STR_LEN);
            memcpy(str_final, str_temp, len_str);
        }else{
            memset(str_temp, 0, MAX_STR_LEN);
        }

    }

    printf("The biggest string is: %s\n", str_final);
    printf("It's size is: %d\n", len_max);
    exit(EXIT_SUCCESS); 
}
于 2012-09-21T12:24:56.553 に答える
0

最長の文字列を見つけて、受信したすべての文字列を保存できます。

int main()
{
 char *str = NULL;
 char *compare;
 printf("Enter strings:");
 scanf("%s", compare);
 if (strlen(str) < strlen(compare))
    str = strdup(compare);
 return(0);
}

そして、すべてのユーザー入力を保存したい場合 (ユーザーからの文字列は 10 個しかないことを考慮して)、次のようにすることができます。

int main()
{
 char **array;
 char *str;
 int x = 0;
 int shortest;
 array = malloc(sizeof(char*) * 10);
 while (x < 10)
  {
   scanf("%s", str)
   array[x] = strdup(str);
   x++;
  }
 x = 0;
 shortest = x;
 while (x < 10)
  {
   if (strlen(array[x]) > strlen(shortest))
     shortest = x;
   x++;
  }
 return (0);
}

shortest は、配列内の最長の文字列のインデックスになります。

これがお役に立てば幸いです。

于 2012-09-21T10:20:46.137 に答える