char sentence[82]
int value[82]
int sum[82]
char word[21]
int max=0
int maxplace=-1
gets(sentence)
int i
for(i=0i<strlen(sentence))
{
if( (sentence[i]>='a' && sentence[i]<='z') || (sentence[i]>='A' && sentence[i]<='Z') )
{
value[i]=1
}
else
{
value[i]=0
}
}
//上述操作把是字母的赋值为1,不是字母的赋值为0,结果存放在value数组中
//剩下的工作就是找出最多连续的1,并读取sentence中的原值。
//再进行一步简化操作,求数组value的连续和,
//也就是说,当第i+1位与第i位的值相同时,i+1位存i+1内的值与i位的和之和。
//否则i+1位存他本身的值。
for(i=0i<strlen(sentence)i++)
{
if(i==0)
{
sum[i]=value[i]
}
else if(value[i]==value[i-1])
{
sum[i]=sum[i-1]+value[i]
}
else
{
sum[i]=value[i]
}
}
//找出最大值,就是你需要的单词的末位。想不明白可以找个例子求一下sum数组,一目了然
for(i=0i<strlen(sentence)i++)
{
if (sum[i]>max) //此处填>,就是求出第一个最大长度的,填>=,就是求最后一个最大长度的
{
max=sum[i]
maxplace=i-max+1 //直接求出单词的首字母,配合长度max,很容易找出单词
}
}
for(i=0i<maxi++) word[i]=sentence[maxplace+i]
word[i]='\0'
printf("%s\n",word)
#include <stdio.h>#include <string.h>
//用于判断字符是否是英文字节
int word(char c)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1
else return 0
}
int longest(char str[])
{
int i,flag=1,len=0,point,max_len=0,max_point
//遍历字符
for(i=0i<=strlen(str)i++)
{
//判断是否为英文
if(word(str[i]))
{
if(flag==1)
{
//单词第一个找到后改变标志
point=i
flag=0
}
else len++ //开始对这个单词长度进行累加
}
else //非英文字母
{
//等待第一个英文字母的出现,所以flag=1(要是下一个是英文字母的话就能执行上面的if)
flag=1
//之前累加的单词长度是否比上一个单词更长(第一次的话max_len初始化为0,len必大于max_len)
if(len>max_len)
{
//将单词长度保存下来
max_len=len
//将最长单词的第一个英文字母在字符串中的位置保存下来
max_point=point
}
len=0
}
}
return (max_point)
}
int main()
{
int word(char c)
int longest(char str[])
int i
char str[80]
printf("输入一行字符串\n\n")
gets(str)
printf("\n\n最长的单词为:\n\n")
for(i=longest(str)word(str[i])i++)
printf("%c",str[i])
printf("\n")
return 0
}