#include
#include
int main()
{
int alphabetic(char);
int longest(char []);
int i;
char line[100];
int length=0;
printf("input one line\n");
scanf("%s",line);
printf("The longest word is:");
for(i=longest(line);alphabetic(line[i]);i++)//longest(line)最后有返回值,其返回值是最大单词的起始地址
//alphabetic(line[i])充当判断语句,直到最后一个字符不是字母,就跳出for循环
printf("%d",i);
printf("\n");
return 0;
}
int alphabetic(char c)
{
if((c>='a'&& c<='z')||(c>='A'&& c<='Z'))
return(1);
else
return(0);
}
int longest(char string[])
{
int len=0,i,length=0,flag=1,place=0,point;
for(i=0;i<=strlen(string);i++)
if(alphabetic(string[i]))//进行判断,如果c是字母的话,则返回值为1,在if语句中表示为真,执行if语句
{
if(flag)//if(flag==1)表示为真,执行if语句
{
point=i;
flag=0;//flag=0的作用:当下一个字符依旧是字母是,由于flag=0,则不执行本语句,而执行else语句,从而确定本单词的长度
}
else
len++;//逐步确立单词的长度,直到下一个字符为非字母
}
else
{
flag=1;//当遇到空格等非字母的字符,则执行本次语句
if(len>=length)
{
length=len;//如果本次单词的长度大于上次单词的长度,则替换掉原有的
place=point;//将当前的最大单词的起始地址,所在序列赋给place
len=0;//使得可以重新计算新单词的长度
}
}
return(length);
}
要求:
输入:Ab9hjh7uyhjn8m
输出:5
结果我输出56
我帮你写了一个看合适不?仅供参考 谢谢!
#include<stdio.h>
int isal(int c)
{
return c >= 'a' && c <= 'z' || (c >= 'A' && c <= 'Z') ? 1 : 0;
}
int longest(char *s)
{
int max = 0, n = 0;
char *p = s;
while (*p != '\0')
{
if (isal(*p))
{
n++;
if (n > max)
max = n;
}
else
n = 0;
p++;
}
return max;
}
int main()
{
char s[512];
scanf("%s", s);
printf("%d\n", longest(s));
return 0;
}