C语言 :写一个函数 输入一行字符 将此字符串中最长的单词输出
悬赏分:0 - 离问题结束还有 14 天 23 小时
8-10
#include
void 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");
}
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=0;i<=strlen(str);i++)//解析每个字符
{
if(word(str[i])) //是英文字母的话
{
if(flag==1) //成立的话说明这个英文字母是单词的第一个
{
point=i; //单词第一个找到后改变标志
flag=0;
}
else len++; //开始对这个单词长度进行累加
}
else //非英文字母的话
{
flag=1; //等待第一个英文字母的出现,所以flag=1(要是下一个是英文字母的话就能执行上面的if)
if(len>max_len)//之前累加的单词长度是否比上一个单词更长(第一次的话max_len初始化为0,len必大于max_len)
{
max_len=len;//将单词长度保存下来
max_point=point;//将最长单词的第一个英文字母在字符串中的位置保存下来
}
len=0;
}
}
return (max_point);
}
#include
#include
int main()
{
void word(char array[]);
char str[81];
printf("请输入一行字符:");
gets(str);
word(str);
}
void word(char array[])
{
void fanxu(char g[]);
int i,j,k,L,m,p,max,n=0;
int b[81];
char c[81];
L=strlen(array);
for(i=0;i<=L;i++)
{
k=i+1;
if((array[i]==32&&array[k]!=32)||array[i]=='\0')
{
n++;
for(j=n-1;j
b[j]=i;
}
}
}
max=b[0];
for(j=1;j
if((b[j]-(b[j-1]+1))>max)
{
max=b[j];
}
}
m=max-1;
p=0;
while(array[m]!=32)
{
c[p]=array[m];
m--;
p++;
}
c[p]='\0';
printf("此字符串中最长单词为:");
fanxu(c);
puts(c);
}
void fanxu(char g[])
{
char t;
int i=0;
int j=strlen(g)-1;
while((j-i)>=0)
{
t=g[i];
g[i]=g[j];
g[j]=t;
i++;
j--;
}
}