调用函数输出一行字符串中的最长单词


#include<stdio.h>
#include<string.h>
int main()
{
    int pd(char x);
    int longest(char y[80]);
    char a[80];
    int i;
    printf("输入一行字符:\n");
    gets(a);
    printf("其中最长的单词为:\n");
    for(i=longest(a);pd(a[i]);i++)
    printf("%c",a[i]);
    return 0;
}

int pd(char x)        //判断是否为字母 
{
    int z;
    if(x>='a'&&x<='z'||x>='A'&&x<='Z')
    z=1;
    else z=0;
    return z;
}

int longest(char y[80])
{
    int n,i,start=1,length=0,point,len=0,place=0; //start=1表示开始一个新单词 
    n=strlen(y);      //length表示单词长度,len用来存放单词的最大长度,point表示新单词的位置 
    for(i=0;i<=n;i++)    //place表示最长单词的位置 
    {
        if(pd(y[i]))
        {

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/318927567486150.png "#left")
            if(start)         //如果出现一个新单词,记录它的位置 
            {
                point=i;
                start=0;      //归为一个单词 
            }
            else length++;
        }
        else
        {
            start=1;
            if(length>=len)
            {
                len=length;
                place=point;
                length=0;
            }
        }
    }
    return place;
}

img

#include<stdio.h>
#include<string.h>
int main()
{
    int pd(char x);
    int longest(char y[]);
    char a[80];
    int i;
    printf("输入一行字符:\n");
    gets(a);
    printf("其中最长的单词为:\n");
    for(i=longest(a);pd(a[i]);i++)
    printf("%c",a[i]);
    return 0;
}

int pd(char x)        //判断是否为字母 
{
    int z;
    if(x>='a'&&x<='z'||x>='A'&&x<='Z')
    z=1;
    else z=0;
    return z;
}

int longest(char y[]) {
    int i = 0, len = 0, max_len = 0, start_idx = 0, max_start_idx = 0;
    
    while(y[i] != '\0') {
        if(pd(y[i])) {
            if(len == 0) {
                start_idx = i; // 记录新单词的起始下标
            }
            len++;
        } else {
            if(len > max_len) {
                max_len = len;
                max_start_idx = start_idx; // 记录最大单词起始下标
            }
            len = 0;
        }
        i++;
    }
    
    // 如果最后一个单词比其他单词更长,则更新 max_len 和 max_start_idx
    if(len > max_len) {
        max_len = len;
        max_start_idx = start_idx;
    }
    
    return max_start_idx;
}