| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9935 人关注过本帖, 1 人收藏
标题:在字符串中提取单词的方法
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:12 
在字符串中提取单词的方法
在字符串中提取一个用约定分隔符分割的单词,是编程常用的操作。scanf()函数读取数据,主要靠的就是这个手段,因为输入流是字符串,要把各种用字符表达的数据转换为所需的类型,首先要把符合条件的单词分割出来,再进行转换处理。C语言处理这个操作,实际上是用strtok()函数,这个函数C程序员必须掌握,很常用。示例如下:

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main(void)
{
    char text[] = "I Love China !";                 // 被分割的字符串,必须是可编辑的,不能储存在常量区
    const char delimit[] = { ' ', '!', '\0' };      // 分割单词的字符集
    char* word = NULL;                              // 提取到的单词的指针
    char* nextWord = NULL;                          // 指示下次操作的入口指针,实际上是strok()在分割单词之后
                                                    // 置入的'\0'字符处,这就是源串不能是常量的原因

    word = strtok_s(text, delimit, &nextWord);
    while (word != NULL)
    {
        puts(word);
        word = strtok_s(NULL, delimit, &nextWord);
    }

    _getch();
    return EXIT_SUCCESS;
}


运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 单词 C语言 程序员 字符串 
2015-04-11 13:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这个同时也是很典型的指针运用例子。留意word,仅仅是指针,我们并没有给它分配内存,那么它指向的地方实际上是哪里?结束符'\0'是怎么置入的?使用这个方案的时候,我们需要怎样的后续手段?假如源字符串在常量区怎么办?

授人以渔,不授人以鱼。
2015-04-11 13:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实,根据上面的实践和分析,已经可以想到strtok()函数是怎么实现的了,到时不用库函数,或改用其他语言,也懂怎么做同样的事情。这才是该学的,这才是基础。

授人以渔,不授人以鱼。
2015-04-11 14:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
顺便提一提之前有人问过的“输入输出型参数”。在strtok()函数的参数列表中,第二个是输入参数,第一个是输入和输出参数,第三个是输出参数,另外还有一个返回值。

授人以渔,不授人以鱼。
2015-04-11 14:20
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
顶一个

你醒了?快起来敲代码!!
2015-04-11 14:22
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
好贴留名
关于字符串的操作函数 我这有一个链接  借这个贴子  与大家共享
http://c.

[ 本帖最后由 纳兰伽香 于 2015-4-11 15:25 编辑 ]

风回小院庭芜绿,柳眼春相续
2015-04-11 15:24
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
为啥我发的链接是黑的

风回小院庭芜绿,柳眼春相续
2015-04-11 15:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用纳兰伽香在2015-4-11 15:28:00的发言:

为啥我发的链接是黑的

我看得到啊

授人以渔,不授人以鱼。
2015-04-11 16:19
皮影09
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2015-3-28
收藏
得分:0 
为什么第二次之后s就变成NULL了?从NULL里面找delimit理解不了啊。。。
2015-04-11 16:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用皮影09在2015-4-11 16:30:48的发言:

为什么第二次之后s就变成NULL了?从NULL里面找delimit理解不了啊。。。

这个函数是有延续动作的,第二次接收的参数为NULL,约定是从上一次标记的位置开始操作,否則,你可以重新设定一个不同的位置。这是函数作者设计的约定,很多程序设计技巧都这样用。

授人以渔,不授人以鱼。
2015-04-11 16:38
快速回复:在字符串中提取单词的方法
数据加载中...
 
   



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

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