c-查找输入数组中最长和最短的字符串



这是我第一次使用S.O,但我的简单程序有问题。Im学习C,Im试图对10个字符串(用户输入(的数组进行排序,以找到最大和最小的字符串,并在最后将其打印在屏幕上,以及字符串的长度。我的最大长度跑得很好,但当我试图找到最小长度时遇到了困难,它只是一直在说";最小的单词是'lect■`☻♦'具有4个字符"我尝试为最小长度创建一个嵌套循环,以便将数组中的每个字符串与下一个字符串以及存储在minLength变量中的最小字符串进行比较。我不知道这些随机符号为什么会出现,也不知道它是从哪里来的。任何建议都将不胜感激!谢谢

#include <stdio.h>
#include <string.h>
int main()
{
int maxLength = 0;
int maxIndex = 0;
int minIndex = 0;
char word_length[10][20];
printf("Please type 10 words: --------------------- n n");
/*USER ENTERS 10 WORDS*/
for (i = 0; i < 10; i++)
{
scanf("%s", &word_length[i]);
}
/*SEARCH FROM INDEX POINTER 0-10*/
for (i = 0; i < 10; i++)
{
/*NEW VARIABLE LENGTH IS UPDATED TO LENGTH OF EACH STRING HELD IN EACH POINTER IN WORD_LENGTH ARRAY*/
int length1 = strlen(word_length[i]);
/*IF THE NEW LENGTH IS BIGGER THAN THE PREVIOUS MAXIMUM LENGTH, THE MAXIMUM LENGTH SCORE IS UPDATED*/
/*THE MAXINDEX VARIABLE KEEPS A RECORD OF WHICH ARRAY POSITION THIS STRING IS HELD IN*/
if (length1 > maxLength)
{
maxLength = length1;
maxIndex = i;
}
/*NEW VARIABLE LENGTH IS UPDATED TO LENGTH OF EACH STRING HELD IN EACH POINTER IN WORD_LENGTH ARRAY*/
int length2 = strlen(word_length[i]);
int next_length2 = strlen(word_length[++i]);
int minLength = strlen(word_length[1]);
/*IF THE NEW LENGTH IS SMALLER THAN THE PREVIOUS MINIMUM LENGTH, THE MINIMUM LENGTH SCORE IS UPDATED*/
/*THE MININDEX VARIABLE KEEPS A RECORD OF WHICH ARRAY POSITION THIS STRING IS HELD IN*/
if (length2 < next_length2)
{
if (length2 < minLength)
{
minLength = length2;
minIndex = i;
}
}
}

/*THE BIGGEST WORD IS DISPLAYED ON SCREEN USING THE MAXINDEX POINTER*/
printf("The biggest word is '%s' with %d charactersn", word_length[maxIndex], maxLength);
printf("The smallest word is '%s' with %d charactersn", word_length[minIndex], minLength);
return 0;
}

对于初学者来说,调用scanf

scanf("%s",&word_length[i]);

至少应该像一样重写

scanf("%s", word_length[i]);

尽管写会更安全

scanf("%19s", word_length[i]);

两者都适用于类似的环路

for (i=0;i<11;i++)

使用不正确的条件。

你必须写

for ( i=0; i < 10;i++)

变量minLength未在函数main的块作用域中声明。

在这个用于搜索具有最小长度的字符串的for循环中,使用了本地声明的变量minLength

for (i = 0; i < 11; i++)
{
/*NEW VARIABLE LENGTH IS UPDATED TO LENGTH OF EACH STRING HELD IN EACH POINTER IN WORD_LENGTH ARRAY*/
int length2 = strlen(word_length[i]);
int next_length2 = strlen(word_length[++i]);
int minLength = strlen(word_length[1]);
^^^^^^^^^^^^^ 

循环不需要使用两个。使用一个循环就足够了。

的外观如下

size_t maxIndex = 0;
size_t minIndex = 0;
size_t maxLength = strlen( word_length[0] );
size_t minLength = strlen( word_length[0] );
for ( size_t i = 1; i < 10; i++ )
{
size_t length = strlen( word_length[i] );
if ( maxLength < length )
{
maxLength = length;
maxIndex = i;
}
else if ( length < minLength )
{
minLength = length;
mibIndex = i;
}
}
printf("The biggest word is '%s' with %zu charactersn", word_length[maxIndex], maxLength);
printf("The smallest word is '%s' with %zu charactersn", word_length[minIndex], minLength);

最新更新