C语言字符串处理的一些函数strok,strstr, strchr,strsub
- 字符串切割函数
函数原型:char *strtok(char *s, char *delim);
函数功能:把字符串s按照字符串delim进行分割,然后返回分割的结果。
函数使用说:
1.strtok函数的实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’/0′)来替换,直到找遍整个字符串。这句话有两层含义:(1)每次调用strtok函数只能获得一个分割单位。(2)要获得所有的分割单元必须反复调用strtok函数。
2.strtok函数以后的调用时的需用NULL来替换s.
3.形参s(要分割的字符串)对应的变量应用char s[]=”….”形式,而不能用char *s=”….”形式。
例子如下:
#include <stdio.h>
#include <string.h>
int main(void)
{char buf[]=”Golden Global View”;char* token = strtok( buf, " ");while( token != NULL ){printf( ”%s “, token );token = strtok( NULL, ” “);}return 0;
}
其结果为:
Golden
Global
View
但是如果我们把char buf[]=”Golden Global View”;换成char *buf=”Golden Global View”; 则会出错,原因是如果分配的大小一样的前提下char *p和char b[]也是有区别的,
char *p=”abc”;
char b[]=”abc”;
当这两个语句编译后,编译器会将“abc”放在常量区中,而strtok(char *s, char *delim)函数是在s中查找包含在delim中的字符并用NULL(’/0′)来替换,直到找遍整个字符串。这句话就能体现指针和数组的区别:既然查找就要p++/b++。 要替换成(‘/0’),那么就要对*p/*b赋值
*p=’/0’;
*b=’/0’;
p指针是指向常量字符串的,对*p操作就是对字符串操作,这显然会编译不通过的。
b是字符数组的首地址,这个数组里面的元素是‘a’、’b’、’c’、’/0’,和字符串“abc”看上去是一样,不过并不是同一个。相当于,b数组里可以存放其他东西’1’、’2’、’3’、’/0’,只不过在编译到char b[]=”abc”;后给这个b数组里的元素值改变了,所以对*b的操作并不影响字符串。
如果我们把token = strtok( NULL, ” “);换成token = strtok( buf, ” “);则while循环会成为一个无限循环,而输出的结果就只为:Golden。我的解释原因如下: 在strtok函数体中有一个char 类型的指针(假设为 char *p),它的作用就是令p=s,用于保存s的起始地址。由于在随后的处理中指针p的值会一直保存(C语言中指针的特点),因此在以后的strtok调用中用NULL来代替s的原因就是防止p被重新赋值而指向s的起始地址,从而可以保证p可以指向s的其他位置,直到最后分割完整个字符串。 但是如果用s来代替NULL,那么每次调用strtok时,p就会指向s的初始地址,从而只能获得第一个分割出来的字串,如上面的例子中while会是一个无限循环,而输出的结果只能是“Golden”。
2.字符串中查找字串
strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
char *strstr( char *str, char * substr );
【参数说明】str为要检索的字符串,substr为要检索的子串。
【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
【函数示例】strstr()函数的使用。
#include<stdio.h>
#include<string.h>
int main(){// 也可以改成 char str[] = "http://see.xidian.edu.cn/cpp/u/xitong/";char *str = "http://see.xidian.edu.cn/cpp/u/xitong/";char *substr = "see";char *s = strstr(str, substr);printf("%s\n", s);return 0;
}
运行结果:
see.xidian.edu.cn/cpp/u/xitong/
3.查找字符在字符串中首次出现的位置
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位。
【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置。设字符在字符串中首次出现的位置为 i,那么返回的地址可以理解为 str + i。
提示:如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数。
【实例】查找字符5首次出现的位置。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(){char *s = "0123456789012345678901234567890";char *p;p = strchr(s, '5');printf("%ld\n", s);printf("%ld\n", p);system("pause");return 0;
}
输出结果:
12016464
12016469
4.获取字符串指定位置间的字符串
str.substr(startpos, length);
其中 startpos 是起始字符的序号,length 是[从 startpos 开始]取的字符串长度(包括
startpos )。
如果要取得 str 中序号 m 到 n 之间(不包括n)的子字符串需要用
str.substr(m, n-m);
#include<string>
#include<iostream>
using namespace std;
main()
{
string s("12345asdf");
string a=s.substr(0,4); //获得字符串s中 从第0位开始的长度为4的字符串
cout<<a<<endl;
}
输出结果为:
1234
C语言字符串处理的一些函数strok,strstr, strchr,strsub相关推荐
- 如何求C语言字符串长度(strlen函数和sizeof关键字)
如何求C语言字符串长度(strlen函数和sizeof关键字) 在程序里,一般会用***strlen()***函数或***sizeof()***来获取一个字符串的长度,但这2种方法获取的字符串的长度其 ...
- R语言字符串拼接(paste()函数)
R语言中常使用paste()函数进行字符串拼接,paste()函数可以将任意数量的参数组合在一起. 1. 语法 代码 参数 paste(-, sep = " ", collapse ...
- atoi函数_C语言字符串、数字转换函数大全!
常用到字符串和数字的转换 想找却发现网上的资料太散 所以搜集整理一下,方便给大家以后再用 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) st ...
- C语言-字符串拼接(不用strcat函数)
#include<stdio.h> int main() {char str1[100];char str2[100];int i = 0, j = 0;printf("请输入字 ...
- C语言 字符串比较不用strcmp函数
保留strcmp的比较规则 字符串比较函数strcmp的比较,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止.基本形式为strcmp(str1,str2 ...
- c语言字符串 从后拷贝,C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include #include #include char* my_strcpy1(char* dest, const char* ...
- 分割字符串c语言strsep,C语言 字符串切割
#include #include #include /* 字符串切割函数 */ /* 知识补充: 1. 函数原型: char *strtok(char *str, const char *delim ...
- C语言字符串输入输出函数
C语言字符串输入输出函数 putchar()函数 getchar()函数 puts()函数 gets()函数 getche()函数 getch()函数 putchar()函数 格式: putchar( ...
- R语言应用str_match函数和str_match_all函数从字符串抽取匹配的字符串模式:str_match函数抽取第一个匹配的字符串模式、str_match_all函数抽取多个匹配的字符串模式
R语言应用str_match函数和str_match_all函数从字符串抽取匹配的字符串模式:str_match函数抽取第一个匹配的字符串模式.str_match_all函数抽取多个匹配的字符串模式s ...
最新文章
- 特征工程(三)Doc2Vec
- 通过yiic来创建yii应用
- Android微信智能心跳方案
- linux怎么配置ftp服务,Ubuntu下安装、配置FTP服务
- 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第6章-基于间歇控制的非线性多智能体系统的多一致
- python 3d重建_3D点云重建原理及Pytorch实现
- java web逻辑删除代码_MyBatis-Plus之逻辑删除的实现
- (124)FPGA面试题-ZYNQ的PS和PL端怎么交互的?
- “阿里女员工被侵害”案最新进展:两人涉嫌强制猥亵
- t–sql pl–sql_SQL Server处理器性能指标–第3部分–指示硬件组件问题的指标
- 2021-2025年中国伊帕斯行业市场供需与战略研究报告
- C中常量数组不能修改
- python yield理解_python教程:迭代器,生成器与for循环机制
- 模式识别—判别函数分类法(几何分类法)
- 51单片机开发软件keil4的安装(win10)
- torch repeate 的用法
- 转换成带有toc的html,JavaScript生成TOC
- 玩转IE之自动切换代理服务器
- php base64解码,php base64 编码与解码实例详解
- 【python】【爬虫】爬取电子书《红星照耀中国》