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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 星空眼泪 中级黑马   /  2015-5-10 11:58  /  1523 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

///*
6、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)
*/
#include <stdio.h>
#include <string.h>
int main()
{
    char str[100] = "jdidiwdbjbidip hdiuhiewhiewhfiew ihwuihfiuew";
    // printf("请输入一个字符串:");
    //scanf("%s", str);
   
    int j = 0, max = 0, maxStart = 0, maxEnd = 0;
    // 遍历所有的数组元素
    for ( int i = 0 ; str[i] != '\0'; i++)
    {
        // 遍历所有的单词
        for (j = i ;str[i] != ' ';i++)
        {
            // 如果是数组元素是‘\0’,那么表示数组已经遍历完毕,跳出循环
            if (str[i] == '\0')
            {
                break;
            }
        }
        // 纪录最长单词开始的元素的下标,结束元素的下标,以及相隔距离长度
        if (max <= (i - j))
        {
            max = i - j;
            maxStart = j;
            maxEnd = i;
        }
        
    }
    printf("最长的单词是:");
    // 用循环打印字符的方式,打印出单词。
    for (;maxStart < maxEnd; maxStart++)
    {
        printf("%c", str[maxStart] );
    }
   
}


这段代码运行已经的字符串的的时候,能正确输出,如果是自己输入的字符串的时候(用// 已经注释),则会出现乱码,求大神相助啊

12 个回复

倒序浏览
那边不应该用scanf函数,scanf是没办法接受数组的,你可以换成gets(str)
回复 使用道具 举报
可以用getchar(), while((ch = getchar())!='\n')str[i++]=ch; 或者用gets
回复 使用道具 举报
楼上的看来都是有基础的呀,视频上根本就没讲gets之类的函数!
回复 使用道具 举报
视频上有gets。。。还分析了使用gets可能会出现的问题啊。。
回复 使用道具 举报
我来涨知识啦
回复 使用道具 举报
到后面你就会发现其实记录起始下标根本用不到 因为结束下标和长度就可以输出单词了
回复 使用道具 举报
mark,还没看到这里,看来学习一下
回复 使用道具 举报
MadPawn 发表于 2015-5-11 15:26
那边不应该用scanf函数,scanf是没办法接受数组的,你可以换成gets(str)

基础视频没有介绍这个函数啊
回复 使用道具 举报
不给中我就送 发表于 2015-5-11 21:52
视频上有gets。。。还分析了使用gets可能会出现的问题啊。。

基础视频没有介绍这个函数啊
回复 使用道具 举报
我的基础视频中也没有gets这个
回复 使用道具 举报
不给中我就送 发表于 2015-5-11 21:52
视频上有gets。。。还分析了使用gets可能会出现的问题啊。。

你看的是谁的视频?如意大师 还是mj
回复 使用道具 举报
星空眼泪 发表于 2015-5-12 10:39
基础视频没有介绍这个函数啊

我看基础视频的时候也没看到这个函数,做题目的时候我也出现了这个问题,感觉是scanf函数的问题,就回头再看了下scanf函数,然后百度发现这个地方是要用gets函数的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马