Linux C 字符串操作的基本使用
2016-04-22 15:43
573 查看
http://www.360doc.com/content/12/0309/15/8500224_193018975.shtml
所属头文件:<string.h>0、获取字符串长度:int strlen(char *s)int strlen(char *s)函数说明:此函数用于获取s的长度,不包括'\0'注:切记最好保证s的尾部是'\0',strlen函数读到'\0'会自动停止然后统计字符数 返回值:字符数 1、查找指定的字符:index函数,rindex函数,strchr函数 strrchr(其中index函数和strchr函数基本相同,rindex函数和strchr函数相同)(1)char *index(const char* s, char c) char *strchr(const char* s, char c)函数说明:index函数用于查找字符串s中第一个出现c字符的地址,然后将该字符的地址返回.strchr函数与index相似 返回值:若找到指定到字符则返回该字符的地址,否则返回0 举例: char s[] = "abcdeabcde"; char *sdest = NULL; sdest = index(s,'d'); printf("sdest: %s\n",sdest); 输出结果:sdest: deabcde (2)char *rindex(const char* s, char c) char *strrchr(const char* s, char c) 函数说明:类似于index函数,但是他是从字符串开始查找字符c,并返回从字符串尾部开始第一个符合条件的字符的地址(strrchr与rindex相似) 返回值:同index一样 举例: char s[] = "abcdeabcde"; char *sdest = NULL; sdest = rindex(s,'d'); printf("sdest: %s\n",sdest); 输出结果:sdest: de 2、查找满足条件字符串中任意一个字符:strpbrk函数char *strpbrk(const char *s, const char *accept)函数说明:查找s字符串第一个符合accept字符串中任意一个字符的字符的地址 返回值:符合条件的字符的地址 举例: char s[] = "abcdefgefgbe"; char t[] = "omgf"; char *d = NULL; d = strpbrk(s,t);//应该会从s中找到‘f'字符的地址 if(d != 0) { printf("原字符串: %s\n",s); printf("获得到字符串: %s\n",d); } 输出结果: 原字符串: abcdefgefgbe 获得到字符串: fgefgbe 3、统计字符串中连续包含或不包含指定字符串内容到字符数:strspn函数 ,strcspn函数(1)size_t strspn(const char *s, const char *accept)函数说明:从s的开头开始计算连续的字符,这些字符都属于accept中字符,遇到不是accept中的字符则停止,并返回字符个数n,即代表s开始处有连续n个属于accept字符串的字符. 返回值:返回s字符串起始位置开始连续属于accept字符串的字符个数 举例: char s[] = "abcdefgefgmmmmmbbe"; char t[] = "bcdaefg"; int inumber = 0; inumber = strspn(s,t); printf(" %d\n",inumber); 输出结果:10 (2)size_t strcspn(const char *s,const char *reject) 函数说明:与strspn相反,从s的开头开始计算连续不属于reject的字符数,并返回字符个数n,即代表s开头处有n个不属于accept字符串的字符。 返回值:返回s字符串起始位置开始连续不属于accept字符串到字符个数 举例: char s[] = "abcdefgefgmqmmmmbbe"; char t[] = "mq"; int inumber = 0; inumber = strcspn(s,t); printf(" %d\n",inumber); 输出结果:10 4、查找指定字符串:char *strstr(const char *s, const char *need);函数说明:从s中找到与need匹配到子字符串,并将该子字符串的地址返回返回值:匹配的子字符串的起始地址 举例: char s[] = "abcdefgefgmqmmmmbbe"; char t[] = "fge"; char *score = NULL; score = strstr(s,t); printf(" %s\n",score); 输出结果: fgefgmqmmmmbbe 5、字符串分割:char *strtok(char *s, const char *delim)函数说明:strtok函数将s按照delim字符串中的字符分割成一个个子字符串,对于字符串s,当遇到delim中到字符,则将该字符替换成'\0'然后返回'\0'之前的字符串子串。若继续分割,则将第一个参数设置为NULL,程序会从上一次分割结束的位置('\0'之后)开始继续分割,若已经无法分割则返回NULL返回值:分割所得到子字符串的地址.,若无法分割则返回NULL 举例: char s[] = "abc:bcd:ef bg_op fq:yz_dd"; char t[] = ": _"; char *score = NULL; /*第一次调用*/ if((score = strtok(s,t)) == NULL) { printf("failed!\n"); return 0; } printf("%s;",score); /*继续分割,将第一个参数这是为NULL*/ while((score = strtok(NULL,t))) { printf("%s;",score); } 输出结果: abc;bcd;ef;bg;op;fq;yz;dd; 6、字符串比较:strcmp函数, strncmp函数,strcasecmp函数,strncasecmp函数(1)int strcmp(const char *s1,const char *s2);函数说明:s1字符串与s2字符串从开头开始逐字符比较,先用s1的第一个字符的ASCII码的值与s2到第一个字符值到ASCII码值相减,若差值等于0,则继续用s1,s2字符串的第二个字符比较,若不等于0则返回差值。所有字符比较完后差值依然为0,但是其中一个字符串长度较长,如s2比s1多一个字符'a',那么返回差值0-'a'的值 返回值:若两个字符串完全相同则返回0,否则返回字符差值 举例: char s1[] = "abcdefg"; char s2[] = "abcdefgopq"; char s3[] = "abcdefm"; printf("s1与s2比较:%d\n",strcmp(s1,s2)); printf("s1与s3比较:%d\n",strcmp(s1,s3)); return 1; 输出结果: s1与s2比较:-111 s1与s3比较:-6 (2) int strncmp(const char *s1,const char *s2,size_t n); 函数说明:原理与strcmp函数一样,只不过多了一个参数来限制比较用于比较的字符的个数不能超过n,如果两个字符串前n个字符完全一样则返回0,相比strcmp,strncmp函数灵活性更强。 返回值:若两个字符串完全相同则返回0,否则返回字符差值 (3)int strcasecmp(char *s1, char *s2) 函数说明:与strcmp相似,只不过比较的时候忽略大小写差异 返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值 (4)int strncasecmp(char *s1, char *s2,size_t n) 函数说明:于strcasecmp函数相比,多了个参数限定比较字符的个数 返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值 7、字符串复制:strcpy函数、strncpy函数、strdup函数(1)char *strcpy(char *dest, const char *src)函数说明:将src字符串到内容拷贝到dest指向到字符串中,注:拷贝的长度由src字符串的'\0'空字符的位置决定,因此使用到时候要考虑到src末尾是否有空字符,并且考虑dest字符串的大小,有可能dest无法容纳src导致溢出 返回值:dest字符串的起始位置 举例: char dest[50]; char src[] = "adfdasfa"; printf("%s",strcpy(dest,src)); 输出结果: adfdasfa (2)char *strncpy(char *dest, const char *src, size_t n) 函数说明:与strcpy用法类似,将src最多前n个字符拷贝到dest,如果src长度小于n则到'\0'为止,相比strcpy,strncpy函数安全性更高,使用更灵活 返回值:dest字符串的起始位置 (3)char *strdup(char *src) 函数说明:会调用malloc函数动态分配一块大小与src一样的内存,然后将src的内容拷贝到该块内存中,并将内存的起始地址返回,这意味着如果我们不再需要这个字符串的副本,我们最好使用free()将它释放。 返回值:复制成功后的字符串的地址,若失败则返回NULL |
相关文章推荐
- centos 7 的几点改动
- centos下完全卸载mysql
- 一点小知识
- InetAddress.getLocalHost().getHostAddress()获取的ip为127.0.0.1
- linux性能监控——CPU、Memory、IO、Network
- Linux下tmpfs与ramfs的区别
- linux挂载文件系统过程-转载内容与自己的一些理解
- centos 安装haproxy 1.6.3
- linux 时钟时间,用户CPU时间,系统CPU时间 .
- Centos 7&6分布式lamp平台
- Linux的网卡由eth0变成了eth1,如何修复
- iptables限速
- CentOS安装crontab及使用方法
- 在Linux 双机下自己手动实现浮动ip技术
- Linux中mysql的root密码重置
- phpStudy for Linux 和 piwik的安装详解
- CentOS 7 firewalld使用简介
- linux之vim命令使用
- linux下各种格式的压缩包的压缩、解压方法
- Linux信号(signal) 机制分析