黑马程序员技术交流社区

标题: 将一个英语句子中最长的单词筛选出来(可以智能识别标点哦) [打印本页]

作者: 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