1

我将不得不从用户那里获取输入并从这 10 个字符串中找到最长的输入..

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

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

}

如果我像这样接受用户输入,它会将字符串存储在 str 二维数组中吗?要首先找出最长的字符串,我会找到每个字符串的长度并使用 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. */

使用循环接受十个输入并与最长的字符串进行比较。如果最后输入的字符串较长,则将其复制到最长的字符串中。由于这是家庭作业,我不会提供任何进一步的代码。

于 2012-09-21T10:08:08.970 回答
1

不,不会的。您必须循环并读取所有字符串。

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

另外,您缺少一些分号!

于 2012-09-21T10:09:07.083 回答
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 回答
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 回答