2012-09-21 56 views
1

我必须从用户获取输入,并找到那些10串最长的输入..从C中的十个字符串列表中找出最长的字符串?

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

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

} 

我若用户输入这个样子,将其存储在字符串str中二维数组?要找出最长的字符串,我会找到每个字符串的长度,并使用max_length函数来确定最长的字符串。

回答

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. */ 

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

+0

有没有更简单的方法来做到这一点?我搞砸了! –

+2

@ user1687755,我想不出一个更简单的方法。一次完成一步:1)编写一个接受一个输入并打印的程序。 2)扩展程序接受10个输入('for(int i = 0; i <10; i ++)'并打印每个输入。3)修改它符合您的最终要求。 – hmjd

1

不,它不会。你必须循环阅读所有的字符串。

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

此外,你错过了一些分号!

0

您可以找到最长的字符串put并将其保存为接收到的所有字符串。

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

最短将是最长的字符串的索引在你的数组中。

我希望这会帮助你。

+0

我想尽可能地做到最简单的方法。请问上面的代码有效吗?它是完整的程序吗? –

+0

我没有测试过,因为我没有gcc或者其他的东西,但是我认为它可以工作(你将不得不做一个返回数组[x]字符串的函数,这是最长的字符串) 。只要测试一下,无论如何都很容易调试 –

0

将所有输入存储在一个数组中,然后做qsort()它对数组条目的长度,然后取第一个(或最后一个,取决于你如何排序)条目。

好吧,好吧...... - 这可能是过度设计... ;-)

0

我觉得你可以做的只是嵌套循环和排在搜索'\0'性格和运行什么计数器同时。只要你找到一个'\0'停止计数器并将计数器的值存储在一个单独的数组中。所以现在你将有一个10个整数的数组。 现在搜索数组中的最小整数...宾果! 相应的行将具有最短的字符串。 我知道这种方法非常原始,但我认为这对于仅具有C基本知识的人会有帮助。

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); 
} 
相关问题