黑马程序员技术交流社区

标题: 有一题,对字符串不熟悉,有思路,不会写,哈哈 [打印本页]

作者: 万里天    时间: 2015-3-2 16:04
标题: 有一题,对字符串不熟悉,有思路,不会写,哈哈
8、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)

思路分析
1.将字符串 单词 分别保存到数组里,通过空格辨别
2.变量lenght保存单词长度,变量word保存该单词
3.第一个单词的长度与下一个单词的长度比较大小,lenght保存大的那个长度,word保存单词
4.依次比较,最后word就是最长单词
作者: whenorwhere    时间: 2015-3-2 17:56
#include <stdio.h>

int main()
{       
        //已知的字符串,由于不经常修改,所以用char *
        char *str = "You are my best friend";
        //最长单词的长度,初始化为0
        int maxLen = 0;
        //用作记录每次空格后第一个字符的位置
        char *p = str;
        //用于记录最长单词的起始位置
        char *subStr;
        //计算出字符串的长度,便于循环遍历
        int strLen = strlen(str);
        //用于存储最长单词的字符数组
        char subs[20];
       
        //for循环遍历已知字符串的每个字符
        for(int i=0; i<=strLen; i++) {
                //如果当前字符为空或者‘\0’
                if(*str == ' ' || *str == '\0') {
                        //str-p 即为当前单词的长度,如果大于maxLen
                        if((str-p)>maxLen) {
                                //将当前单词的长度赋值给maxLen
                                maxLen = str-p;
                                //保存当前最长单词的起始位置
                                subStr = p;
                        }
                        //‘’字符+1,记录下一个单词的起始位置
                        p = str+1;
                }
                //指向下一个单词
                str ++;
        }
       
        //for循环遍历最长单词,赋值给subs
        for(int i=0; i<maxLen; i++) {
                subs[i] = *(subStr + i);
        }
        //在末尾添加  ’\0‘结束字符
        subs[maxLen] = '\0';
       
        //输出
        printf("最长单词是%s", subs);
       
        return 0;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2