黑马程序员技术交流社区
标题: 将一个英语句子中最长的单词筛选出来(可以智能识别标点哦) [打印本页]
作者: ToBeJeek1 时间: 2015-11-22 15:40
标题: 将一个英语句子中最长的单词筛选出来(可以智能识别标点哦)
/*
特点:可以将包含标点符号的英文句子中的最长单词筛选出来
演示:
请输入一个英语句子:
hello?worldcnajfojej you help, my name is stevelee
最长的单词为:worldcnjfojej
请输入一个英语句子:
Stevelee,your shoes look gook!
最长的单词为:Stevelee
*/
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
//定义字符串数组,用来存储输入的英语句子
char str[100];
printf("请输入一个英语句子:\n");
//获取输入的英语句子
gets(str);
//定义字符指针数组,用来记录单词的首地址
char *words[100];
//定义变量,记录单词的个数
int count=0;
//标记开关,用来辅助计算单词的个数
int flag = 0;
//对输入的字符串(英语句子)进行遍历
for (int i = 0; str!= '\0' ; i++) {
//遇到空格,将标记开关置零,并将空格改为‘\0’
if ((str == ' ')||(str == ',')||(str == '.')||(str == '?')||(str == '!')) {
flag = 0;
str = '\0';
}else if (flag == 0){ //如果遇到flag的值为0,则表示一个单词的开始
//记录空格之后的第一个非空格字符地址
words[count]=&str;
//记录单词数
count++;
//将标记开关置1
flag = 1;
}
}
//用打擂台法来选出最长的字符
//假设第一个单词为最长
unsigned long max = strlen(words[0]);
//用来记录最长单词的地址在words[]数组中的下标
int loc = 0;
//printf("count=%d\n",count);
//遍历所有单词,选出长度最长的
for (int i; i < count; i++) {
// printf("words[%d]=%p\n",i,words);
if (max < strlen(words)) {
//printf("%lu\n",max);
max = strlen(words);
//记录最长单词的地址在words[]数组中存储的位置
loc = i;
}
}
//printf("最长的单词为:%s\n",words[loc]);
printf("最长的单词为:");
char *p;
p=words[loc];
//将选出的最长单词按逐个字符进行打印,目的是将单词后面的标点符号去除
for (int i = 0; *(p+i)!='\0'; i++) {
if (((*(p+i)>'a')&&(*(p+i)<'z'))||((*(p+i)>'A')&&(*(p+i)<'Z'))||(*(p+i)=='-')) {
printf("%c",*(p+i));
}
}
printf("\n");
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |