写一个函数,对于一行字符(含空格),能够找到字符串中最长的单词。
主函数中,输入字符串,调用自定义函数并输出最长的单词。
比如输入:a aa aaa aaaa
输出:aaaa
方案一:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char current_word[100];
char max_word[100];
/*函数功能:寻找最长字符串*/
char *search_longest_word(char str[])
{
int current_length = 0;
int max_length = 0;
while(*str != '\0') //遍历输入的所有字符串
{
if(isalpha(*str)) //当指针str指向字母时
current_word[current_length++] = *str; //更新当前字符串,同时记录当前字符串长度
else
{
if(current_length > max_length) //若当前字符串长度大于最长字符串
{
strcpy(max_word, current_word); //将其记录为最长字符串
max_length = current_length; //将其长度记录为最长长度
}
current_length = 0; //字符串长度清零
}
str++; //继续移动指针
}
//循环结束之后,最后一个字符串尚未进行比较,需要再次进行判断
if(current_length > max_length) //若当前字符串长度大于最长字符串
{
strcpy(max_word, current_word); //将其记录为最长字符串
max_length = current_length; //将其长度记录为最长长度
}
return max_word;
}
int main()
{
char str[100] = {0};
gets(str);
printf("%s\n",search_longest_word(str));
return 0;
}
方案二:
#include <stdio.h>
#include <string.h>
int main()
{
int alphabetic(char);
int longest(char []);
int i;
char line[100]={0};
gets(line);
for (i=longest(line); alphabetic(line[i]); i++)
printf("%c",line[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=1,i,length=0,flag=1,place=0,point;
for (i=0; i <=strlen(string); i++)
if (alphabetic(string[i]))
if (flag) {
point=i;
flag=0;
} else
len++;
else {
flag=1;
if (len>=length) {
length=len;
place=point;
}
len=1;
//printf("%d %d\n",place,length); //for debug only
}
return(place);
}