写一个快一个月,这是我写过的最长的程序了。我认为比书上的好。最大的优势是我的如果出现重复的长度,是可输出的。
#include<stdio.h>//8.10 写一函数,输入一行字符,将此字符串中最长的单词输出。(改)
int character(char c); //判断是否是字符
int word_head(int i,char s[]);//判断单词的开头
int word_bottom(int i,char s[]);//判断单词的结尾
int word_number(char s[]);//求单词的数量
int word_length(char s[]);//记录每个字母的长度
void show_longest_words(int max_word_length,char s[]);//输出长度最长的单词
int character(char c)//判断是否是字符
{
if( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z')) )
return 1;
else
return 0;
}
int word_number(char s[])//统计单词数量,用计算结尾的方法
{
int word_number=0,i;
for(i=0;s[i]!='\0';i++)
{
word_head(i,s);
if(word_bottom(i,s)) word_number++;
}
return word_number;
}
int word_bottom(int i,char s[])//判断是否单词结尾
{
if((character(s[i])==1)&&(character(s[i+1])==0))
{
//printf("本次判断的是s[%d]='%c',结尾条件成功。\n",i,s[i]);
return 1;
}
else
return 0;
}
int word_head(int i,char s[])//判断是否单词开头
{
if(i==0)
{
if(s[0]!=' ')
{
//printf("本次判断的是s[%d]='%c',开头条件成功。\n",i,s[i]);
return 1;
}
else
return 0;
}
else
{
if( (character(s[i])==1)&&(character(s[i-1])==0) )
{
//printf("本次判断的是s[%d]='%c',开头条件成功。\n",i,s[i]);
return 1;
}
else
return 0;
}
}
int word_length(char s[])//记录每个字母的长度,求最长单词的长度,并记录
{
int n,i,j,flag=0,num=1,max_word_length=0;
n=word_number(s);
int word_length[n];//定义一个记录每个字母长度的数组,word_length[]。
i=0;
for(j=0;s[j]!='\0';j++)
{
word_length[i]=0;
if(word_head(j,s)==1)
{
flag=1;
}
if(flag)
{
word_length[i]=num++;
}
if(word_bottom(j,s)==1)
{
flag=0;
num=1;
i++;
}
}
for(i=0;i<n;i++)
{
if(word_length[i]>max_word_length) max_word_length=word_length[i];
}
return max_word_length;
}
void show_longest_words(int max_word_length,char s[])//输出长度最长的单词
{
printf("\n进入show_longest_words()函数。\n");
printf("最长的单词长度:max_word_length=%d。\n",max_word_length);
int n,i,j,flag=0,num=1,c_i;
char c_temp[500];//定义一个临时数组,用来存放每个单词。
n=word_number(s);
int word_length[n];//定义一个记录每个字母长度的数组,word_length[]。
i=0;
for(j=0;s[j]!='\0';j++)
{
word_length[i]=0;
if(word_head(j,s)==1)
{
flag=1;
c_i=0;
}
if(flag)
{
word_length[i]=num++;
c_temp[c_i]=s[j];
c_i++;
}
if(word_bottom(j,s)==1)
{
flag=0;
num=1;
i++;
c_temp[c_i]='\0';
if(word_length[i-1]==max_word_length)
{
printf("最长单词是:");
puts(c_temp);
}
}
}
}
int main()
{
char s[100];
printf("请输入一行字符串:");
gets(s);
printf("您的输入成功。");
puts(s);
printf("您输入的字符串中单词数为:%d\n",word_number(s));
word_length(s);
show_longest_words(word_length(s),s);
return 0;
}