标题:一组字符串,求最长字符
只看楼主
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
结帖率:71.43%
已结贴  问题点数:20 回复次数:9 
一组字符串,求最长字符
/*const char sentence[] = "our Tomorrow will be better";
    printf("%s\n",sentence);
    int maxWordLength = 0,currentWordLength = 0,maxWordStartIndex = 0;
    unsigned long str_len = strlen(sentence);
    for (int i = 0; i < str_len + 1; i++) {
        char character = sentence[i];
        if (character != ' ' && character != '\0') {
            currentWordLength ++ ;
        }else{
            if(maxWordLength < currentWordLength){
                maxWordLength = currentWordLength;
                maxWordStartIndex = i - currentWordLength;
            }
            currentWordLength = 0;
        }
    }
    printf("startIndex = %d; maxLength = %d ",maxWordStartIndex,maxWordLength);
    for (int i = maxWordStartIndex; i < maxWordLength + maxWordStartIndex; i++) {
        printf("%c",sentence[i]);
    }*/
不明白“int maxWordLength = 0,currentWordLength = 0,maxWordStartIndex = 0;”的意义,请大神能讲解一下
搜索更多相关主题的帖子: character better 字符串 
2014-09-05 16:51
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
首先 请保证你的代码能正确运行 并得到正确结果  否则解析代码无任何意义

DO IT YOURSELF !
2014-09-05 16:58
枫__________
Rank: 2
等 级:论坛游民
帖 子:11
专家分:29
注 册:2011-5-21
得分:0 
初始化有什么问题?

膜拜
2014-09-05 17:48
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
得分:0 

不明白“int maxWordLength = 0,currentWordLength = 0,maxWordStartIndex = 0;”的意义,请大神能讲解一下


简单说说:
假设我们统计一段文字里面最长的单词,以及最长的单词的位置
设字符段就是:  sentence[]=“our Tomorrow will be better”  来说吧
系统开始
int maxWordLength = 0, 扫描前 我先假设最大长度的单词是0,
currentWordLength = 0, 设置当前扫描的单词 长度为0
maxWordStartIndex = 0  之前所有扫描过的最大长度单词的起始位置预设为0
我设一个扫描的指针为 char character = sentence[i]; 当前扫描位置 我们不妨用竖线来表示
      其实应该是圈起来某个字母,当前扫描的字母我们用蓝色标记
1:
|our Tomorrow will be better
int maxWordLength = 0,currentWordLength = 0,maxWordStartIndex = 0;
2:
o|ur Tomorrow will be better
int maxWordLength = 0,currentWordLength = 1,maxWordStartIndex = 0;
3:
ou|r Tomorrow will be better
int maxWordLength = 0,currentWordLength = 2,maxWordStartIndex = 0;
4:
our| Tomorrow will be better
int maxWordLength = 0,currentWordLength = 3,maxWordStartIndex = 0;
5:
our |Tomorrow will be better
咦 怎么扫描到了空格 我怎么办?
这时注意函数体 要执行下面的一段
            if(maxWordLength < currentWordLength){   判断之前的最长字符和当前扫描字符长度 谁大
                maxWordLength = currentWordLength;    如果当前扫描字符大 那么就记录下最大者
                maxWordStartIndex = i - currentWordLength;}    记录下位置。
            currentWordLength = 0;         不管你当前的字符长还是不长 都要重新从0开始统计下一个单词
于是
our |Tomorrow will be better
int maxWordLength = 3 ,currentWordLength = 0,maxWordStartIndex = 0(这个0和之前的0意义有点不同了);





[ 本帖最后由 erty1001 于 2014-9-5 18:29 编辑 ]
收到的鲜花
  • 午夜小学徒2014-09-06 15:09 送鲜花  3朵   附言:我很赞同
2014-09-05 18:20
Coincedence4
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:52
专家分:151
注 册:2014-9-4
得分:20 
i重复定义了。if分支用来搜索单词,else比较出现的单词长度并定位最长单词。
2014-09-05 18:23
c307858
Rank: 2
等 级:论坛游民
帖 子:2
专家分:18
注 册:2014-9-9
得分:0 
直接利用strlen函数求出长度,再进行比较大小就行了,很简单。
2014-09-09 03:45
随风而行lulu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:60
注 册:2014-9-6
得分:0 
回复 4 楼 erty1001
好详细的算法讲解,谢谢分享!
2014-09-11 19:32
随风而行lulu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:60
注 册:2014-9-6
得分:0 
以下是引用c307858在2014-9-9 03:45:47的发言:

直接利用strlen函数求出长度,再进行比较大小就行了,很简单。

跟哪个比较大小?
2014-09-11 19:33
枫__________
Rank: 2
等 级:论坛游民
帖 子:11
专家分:29
注 册:2011-5-21
得分:0 

膜拜
2014-09-11 19:35
随风而行lulu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:60
注 册:2014-9-6
得分:0 
回复 4 楼 erty1001
好详细的算法讲解,谢谢分享!
2014-09-11 19:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-435732-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020774 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved