问答题
1. 编写一个函数,输入n个字符串,串与串之间以Enter键分隔,找出最短字符串中的第一个字符串,传回该串的地址(用一个新串,“*”作为结束输入的标志)。
注意:部分源程序如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<string.h>
#include<conio.h>
char*fun(char(*s)[100],int num)
{
}
void main()
{
char str[10][100],*min;
int n,i=0;
FILE *out;printf ("input strings with'*' as end:");
gets(str[i]);
puts(str[i]);
while(!strcmp(str[i],"*")==0)
{
i++;
gets(str[i]);
puts(str[i]);
}
n=1;
min=fun(str,n);
printf("\nmin=%s\n",min);
out=fopen("outfile.dat","w");
strcpy(str[0],"just,");
strcpy(str[1],"a");
strcpy(str[2],"test");
strcpy(str[3],"some");
strcpy(str[4],"tool?!?");
fprintf(out,"%s",fun(str,5));
fclose(out);
}
【正确答案】int i;
char *min;
min=s[0]; //min初始化
for(i=0;i<num;i++)
if(strlen(min)>strlen(s[i])) //min指向的字符串与其他的字符串进行长度比较
min=s[i];
return min;//返回最小值的字符串
【答案解析】 首先,指定第一个字符串为长度最小的字符串,然后,在循环过程中将其与其他的所有串的长度进行比较,求出最小的串。设置一个指针变量min,使它的初值为第一个字符串,再使其他的所有串的长度与min的长度进行比较,若其他字符串的长度小于min,则将其他字符串的首地址赋值给min。最后,使用返回语句,返回最短长度min的字符串的地址。