写一个函数,输入一行字符(字符串长度<=80),单词之间可以以空格作为分隔符,将此字符串中最长的单词输出,字符串中出现的非英文字符不统计不输出。 程序运行示例1: 输入一行文本: I am a student 最长的单词是: student (后面没有回车) 程序运行示例2: 输入一行文本: I am teacher11 最长的单词是: teacher (后面没有回车) 程序运行示例3: 输入一行文本: house 123@4#567*9 clothes food 最长的单词是: clothes (后面没有回车) 输入提示:"输入一行文本:\n" 输入格式:gets() 输出提示:"最长的单词是:\n" 输出格式:%c (用循环输出)
题目的解答如下:
//输出字符串中最长的单词:
void printf_longest(char* str)
{
int i = 0;
int flag = 0;
int begin, end,interval=0;
int bbegin=0, eend=0;
//将字符串都送入做判读
for (i = 0; str[i] != '\0'; i++)
{
if (isalpha(str[i]))//单词的开头
{
begin = i;//记录开头
for (int j = 1;; j++)//从开头向后判断是否是字母
{
if (isalpha(str[i + j]))
{
flag++;//要判断j次,直到单词结束,flag是j次
}
else
break;
}
end = i+flag;//记录结尾
flag = 0;//清0准备开始下一次循环
int temp = end - begin + 1;//计算间隔
//比较单词的长度
if (temp > interval)//记录最长的单词开始和结束,如果满足,则更新开头和结尾
{
bbegin = i;
eend = end;
interval=temp;
}
i = end;
}
}
for (int i = bbegin; i <= eend; i++)
printf("%c", str[i]);
}
int main()
{
char str[80];
printf("输入一行文本:\n");
fgets(str, 80, stdin);//输入
//调用函数
printf("最长的单词是:\n");
printf_longest(str);
}
这道题用了isalpha,注意头文件要引用#include<string.h>和#include <ctype.h>.
代码的使用很简单,对于每一句的作用注释的都很明白,如有错误,请在评论区指出.