我想编写一个程序,打印字符串最小长度的个数。我有一个单词文件,我从stdin打开并保存到缓冲区。
到目前为止,我的代码输出了每个单词的长度。但是我不知道如何比较这些数字。例如:
Hello
Hi
我的程序做:
6
3
输出应该是:
3
我不知道如何继续。你有什么建议吗?
#include <stdio.h>
int min_stat(char str[])
{
int min=0;
for(int i=0; str[i] != ' '; i++)
{
min++;
}
return min;
}
int main(int argc, char *argv[])
{
if(argc < 1){
fprintf(stderr,"Errorn");
return 1;
}
char param = argv[1][0];
int val=100;
char buffer[val];
if(param == '1')
{
while(fgets(buffer, val, stdin) != NULL)
{
int a = min_stat(buffer);
printf("%dn", a);
}
}
return 0;
}
您需要将字符串的最小长度保存在某个地方,并在检测到更短的字符串时更新它。您的min_stat
函数返回字符串的字符数。
我会这样写:
#define MAX_LENGHT 1000
int main(int argc, char *argv[])
{
if(argc < 1){
fprintf(stderr,"Errorn");
return 1;
}
char param = argv[1][0];
int val=100;
char buffer[val];
/* the maximum possible lenght */
int min_lenght = MAX_LENGHT;
if(param == '1')
{
while(fgets(buffer, val, stdin) != NULL)
{
int a = min_stat(buffer);
/* update the mimimum lenght if it is smaller
than the current value */
if (a < min_lenght) {
min_lenght = a;
}
printf("%dn", a);
}
}
/* print the minimum lenght */
printf("Minimum: %dn", min_lenght);
return 0;
}
你不应该使用变量来初始化char数组,因为你使用的是可变长度数组(VLA)而不是静态数组。如果你正在学习c语言,你应该使用静态数组,所以:
char buffer[MAX_LENGHT];
其中MAX_LENGHT
为常量或预处理器定义。