A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© black747521 中级黑马   /  2015-11-8 21:09  /  843 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//
//  main.c
//  测试题 8
//  8、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)
//  Created by black on 15/11/2.
//  Copyright © 2015年 black. All rights reserved.
//

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {

    //      定义一个字符串数组,用来获取键盘输入的字符串
    char str[100];
    //      定义一个指针数组,用来记录每一个单词的首字母地址
    char *word[20];
    //      定义countWord,用来记录单词个数
    int countWord = 0;

    //      提示输入字符串
    printf("请输入一个字符串\n");
    //      获取字符串
    fgets(str, sizeof(str), stdin);

    //      定义len,记录字符串的长度
    long len = strlen(str);
    //      定义max,用来记录最长单词的长度
    int maxWordLen = 0;
    //      获取到str后,先记录第一个单词的首地址,为str[0]
    word[countWord] = &str[0];
    countWord++;


    //      循环str[],遇到空格时说明空格分离了两个单词,指针数组第countWord个元素
    //      指向空格后的地址,即为下一个单词的首地址,并把空格变成'\0',countWord++
    for (int i=0;i<len;i++) {
        if (' ' == str) {
            word[countWord] = &str[i+1];
            countWord++;
            str = '\0';
        }else if ('\n' == str)
        {
            //      解决str最后一个字符是\n的情况,\n会影响word长度的计算
            str = '\0';
        }
    }
    //      遍历word[],找到最长的单词,但是最长的单词可能不止一个
    for (int i=0; i<countWord; i++) {
        if (strlen(word)>maxWordLen) {
            maxWordLen = (int)strlen(word);
        }
    }

    printf("最长的单词为:\n");

    //      最长单词的长度与每个单词的长度比较,相同时,打印单词
    for (int i=0; i<countWord; i++) {
        if (strlen(word) == maxWordLen) {
            printf("%s\n",word);
        }
    }
    return 0;
}
不完善之处:此方法在查找到最长的单词之后,最初的字符串也被修改了。并且如果遇到多个空格的话,多余的空格也会被记录为单词数。由于题目并没有要求,所以就没有优化。其实c函数中有可以完成从字符串中提取单词功能的函数,strtok(),头文件<string.h>。此处并没有使用。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马