用c语言,怎么输出字符串中最长的单词

2025-03-02 11:39:34
推荐回答(5个)
回答1:

楼主其实你的输入有问题,你怎么不用scanf()函数呢。下面是我写的代码和运行的结果,希望能给你拓展一下思路。注意一下,如果最长的单词有多个,我的代码只能记录第一个最长的。

#include 

#include 

#include 

#include 

int main()

{

    int i, n, t, max, site;

    char word[500][20], s[20];

    printf("please enter some words, enter twice ctrl+z finish\n\n");

    i=0;

    while(scanf("%s", word[i])!=EOF)

    {

        i++;

    }

    n=i;

    max=0, site=0;//初始化:最大长度为0,最长的单词在地0个

    for(i=0; i

    {

        t = strlen(word[i]);

        if(t > max)

        {

            max = t;

            strcpy(s, word[i]);

            site = i;

        }

    }

    if(n>0)

    {

        printf("\nthe longest word is: %s\n", s);

        printf("its' lenth is %d\n", max);

        printf("its' site is %d\n", site+1);

        //site加1是将数组下标改为第几个单词

    }

    else

    {

        printf("there is no word\n");

    }

}

回答2:

# include 
# include 
 
int main() {
    char line[100];
    int alphabetic(char),i;
    int longest(char[]);
    printf("input a line:\n");
    gets(line);
    for(i = longest(line);alphabetic(line[i]);i++)
        printf("%c",line[i]);
    printf("\n");
    return 0;
}
 
int alphabetic(char x) {
    if('a' <= x && x <= 'z' || 'A' <= x && x >= 'Z') return 1;
    return 0;
}
 
int longest(char str[]) {
    int i = 0,len = 0,maxlen = 0,index,start;
    while(str[i]) {
        while(str[i] && !alphabetic(str[i])) ++i; // 过滤掉非英文字符
        len = 0;
        index = i;
        while(str[i] && alphabetic(str[i])) { // 统计单词长度
            ++len;
            ++i;
        }
        if(len > maxlen) {
            maxlen = len;
            start = index;
        }
    }
    return start;
}

回答3:

#include 
#include 
//返回字符c是不是单词的组成部分,包括单引号和字母,数字
//在此可以自己设定哪些字符是单词的组成部分 
//如果是单词的组成部分,函数返回1,否则返回0 
int ischar(char c){
if (c=='\'') return 1;
if (c>='a' && c<='z') return 1;
if (c>='A' && c<='Z') return 1;
if (c>='0' && c<='9') return 1;
return 0;
}

//在s中查找最长的单词,把单词保存在s1,并返回单词的长度 
int maxlongword(char *s,char *s1){
int i=0,i1,j;
*s1=0;   //使s1成为空字串 
while(s[i]!=0){
while(ischar(s[i])==0 && s[i]!=0) i++;  //找下一个单词所在位置i
  i1=i;
  if(s[i]==0) break; 
  while(ischar(s[i])==1 && s[i]!=0) i++;  //找下一个单词结束位置i
if (strlen(s1) for(j=i1;j s1[j-i1]=0;
}   
if(s[i]==0) break;
}
return strlen(s1);
}
int main(){
char p[100];  //用于保存最长的单词 
int n; //用于保存最长单词的长度 
n=maxlongword("Hello this is my worlds !",p);  //调用函数计算最长的单词 
printf("最长的单词是%s 长度=%d\n",p,n);
//运行结果  最长的单词是worlds 长度=6 
}

回答4:

在f函数中再添加一个变量 int pos=0;每找到一个新单词,长度又大于已找到的任意一个单词,就加一,那么最后这个pos就是最长单词的位置了,这个位置指的第几个单词,没有定位到具体的偏移量,但是要算出来也很简单了

回答5:

//帮你改造一下:
#include
#include
void main()
{
char c[50];
void f(char c[50]);//不设返回值了,直接用函数f打印结果。
gets(c);
f(c);
}
void f(char c[50])
{
int len=0,lenth=0,i,flag=0;
for(i=0;c[i]!='\0';i++)
{
if(c[i]!=' ')
len++;
if(c[i]==' ')
{
if(len>lenth)
{
lenth=len;
flag = i - lenth;//当新的最长串出现时,用flag记录该串起始下标
}
len=0;
}
}
if(len>lenth)
{
lenth=len;
flag = i - lenth;//同理
}
printf("最长的子串长度为%d个字符,该子串为:",lenth);//打印子串长度
for(i = flag;i < flag + lenth;i++)//打印子串,下标从flag到flag + lenth - 1
printf("%c",c[i]);
printf("\n");//换行
}