C语言“最长的单词”

Python016

C语言“最长的单词”,第1张

//方便起见,我所有注释都用C++的注释符

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

}