| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1413 人关注过本帖
标题:透彻理解
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我告诉你要建立一个模型啊,你看:

***Hello,**world!*******


上面是一个C字符串,你知道C的字符串处理是通过入口指针的,上面那个箭头就是一个指针,它一开始时位于开始位置,这个就是形参char* str。现在我们要把整个字符串扫描一趟,把第一个单词找出来。开始挪动str了哦,你看到那个箭头会动的,OK,就是str++,它每次右移一个字符。任何时候,你都要检查箭头指向的字符到底是什么。通过*str解引用,把字符提取出来,这相当于ch = *str,ch和*str是等价的。由于我们的目的是不要前面的空字符,所以首先检查*str是不是空字符,注意了,并不是只有空格' '才是空字符,所以不能用==' '来判断,必须使用isspace(*str)来判断,这个函数返回真,表示箭头所指向的字符是空字符,返回假则不是。

这样,我们就知道运动逻辑了:箭头不断右移,不断检查它的字符是什么,如果一直都是空字符,while(isspace(*str++)),就继续右移,这个循环的终止,就是isapace(*str)返回假!一旦循环终止,表示箭头已经指到'H'了。这个时候,表示这个位置是应该反馈回去的字符串的入口地址,所以必须把它记住,用一个变量p = str,记住这个位置,后面将会return p,就是返回的指针。

事情还没有完,既然现在找到了单词的入口,就得把单词找完。继续右移箭头,这个时候,不再判断是否isspace(*str)了,而是判断!isspace(*str),这时循环while(!isspace(*str++))是一直找非空字符,直到再一次遇到空字符终止,这时,表明应该把单词结束了,令*str = '\0'即可,这个时候就可以直接return p了。

但这里要注意一个问题:如果形参是char* str,表示str所指向的字符是可以被修改的,如果是const char* str,那么你就不能贸贸然修改这个字符串,这个时候*str = '\0'是会报错的。如果是这样,整个处理就不是那样了。

[ 本帖最后由 TonyDeng 于 2012-12-31 23:30 编辑 ]

授人以渔,不授人以鱼。
2012-12-31 23:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以上是基本的流程。但是,你想过吗?如果传入的字符串连一个单词也没有的时候,将会怎样?

授人以渔,不授人以鱼。
2012-12-31 23:31
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 22楼 TonyDeng
刚看。。。今天出门到现在才回来不好意思。。
2013-01-01 20:34
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 21楼 TonyDeng
只能说看思路是懂的
但真正要做到总是考虑不了这么多
是不是题目做太少?
2013-01-01 20:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
掌握方法之后多做多练,但如果连方法都不掌握,多做多练是不见效的。

授人以渔,不授人以鱼。
2013-01-01 20:38
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 25楼 TonyDeng
不知哪里能找到题目呢?
2013-01-01 21:16
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
中国市场上最不缺的就是题目...

I have not failed completely
2013-01-01 21:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用破碎的石头在2013-1-1 21:16:03的发言:

不知哪里能找到题目呢?

你现在做的就是了,一道题反复琢磨推敲,等于十道题。多想,是指多设想各种各样的情形,问问为什么要这样做,如果不这样将会怎样,各有什么异同。多想,再简单的题目也不简单,不想,做再多也没用。

授人以渔,不授人以鱼。
2013-01-01 21:21
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 28楼 TonyDeng
谢谢。
2013-01-01 21:26
破碎的石头
Rank: 2
等 级:论坛游民
帖 子:71
专家分:13
注 册:2012-12-11
收藏
得分:0 
回复 27楼 神龙赖了
但好题难找。最怕那些没有经过大脑思考的参考答案
2013-01-01 21:38
快速回复:透彻理解
数据加载中...
 
   



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

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