C 语言之字符串处理函数一 -2016.01.01
2016-01-01 18:03
302 查看
大家呢都知道我们在写程序的时候从终端接受的内容实际上都是字符串,无论整型数据还是浮点型数据,那么字符串的操作就变得尤为重要,而我们常用的字符串操作无外乎基于:字符串的匹配、字符串的查找、字符串的分割、字符串的复制、字符串的连接、字符串的比较等一系列操作。那么今天就让我们来体验一下C语言为我们所提供的这些函数。各个函数的具体功能详见下面。为了能够让大家更好的理解我们可以看下面的程序。
Strtok(char* , char):将字符串以分隔符的方式分割,返回第一个分割所得地址,第一次分割时需加上第一个参数,以后就不需要再加第一个参数了,直接以NULL代替即可,它的每一次调用都返回分割的第Ni个的地址;
Strcmp(char* , char*):比较大小,对大小写敏感;
Strcasecmp(char* , char*):比较大小,对大小写不敏感;
Strncasecmp(char* , char* ,int ): 比较大小,对大小写不敏感,另外课指定对前n个字符进行大小比较;
Strcoll(char* , char*);比较大小,对大小写敏感;另外,会根据LO_LOCAL环境变量的值进行规律性的大小比较;
Strcpy(char* , char*):复制函数,将第二个参数的值复制到第一个里面,会把第二个参数最后的“\0”页复制过去;
Strncpy(char* , char*, int): 复制函数,将第二个参数的前n个值复制到第一个里面,不会把第二个参数最后的“\0”页复制过去,若需全部复制,应指定n等于strlen(第二个参数)+1;
Strcat(char* , char*):拼接函数,将第二个参数拼接到第一个参数后面,自动补0;
Strncat(char* , char*, int): 拼接函数,将第二个参数的钱n个拼接到第一个参数后面,自动补0;
Strdup(char*):首先会调用malloc函数分配和参数大小一样的空间,然后将数据复制过去,租后返回所得空间的地址;
Strchr(char* , char):返回第二个参数在第一个参数中首次出现的位置;
Strrchr(char* , char): 返回第二个参数在第一个参数中最后一次出现的位置;
Strpbrk(char* , char*):返回第二个参数和第一个参数第一次出现相同字符的位置;
Strstr(char* , char*):字符串匹配,返回第二个参数第一次出现在第一个参数中的位置;
Strlen(char*):返回字符串的长度;
Strspn(char* , char*);返回第一个参数从头开始连续在第二个参数中出现的字符个数;
Strcspn(char* , char*):返回第一个参数中从头开始连续在第二个参数中没有出现的字符个数;
以上函数的头文件都为<string.h>,但是如下三个的头文件是<ctype.h>
Toupper(char):将参数转换为大写;
Tolower(char):将参数转换为小写;
Toascii(char)将参数转换为ascii码;
Strtok(char* , char):将字符串以分隔符的方式分割,返回第一个分割所得地址,第一次分割时需加上第一个参数,以后就不需要再加第一个参数了,直接以NULL代替即可,它的每一次调用都返回分割的第Ni个的地址;
Strcmp(char* , char*):比较大小,对大小写敏感;
Strcasecmp(char* , char*):比较大小,对大小写不敏感;
Strncasecmp(char* , char* ,int ): 比较大小,对大小写不敏感,另外课指定对前n个字符进行大小比较;
Strcoll(char* , char*);比较大小,对大小写敏感;另外,会根据LO_LOCAL环境变量的值进行规律性的大小比较;
Strcpy(char* , char*):复制函数,将第二个参数的值复制到第一个里面,会把第二个参数最后的“\0”页复制过去;
Strncpy(char* , char*, int): 复制函数,将第二个参数的前n个值复制到第一个里面,不会把第二个参数最后的“\0”页复制过去,若需全部复制,应指定n等于strlen(第二个参数)+1;
Strcat(char* , char*):拼接函数,将第二个参数拼接到第一个参数后面,自动补0;
Strncat(char* , char*, int): 拼接函数,将第二个参数的钱n个拼接到第一个参数后面,自动补0;
Strdup(char*):首先会调用malloc函数分配和参数大小一样的空间,然后将数据复制过去,租后返回所得空间的地址;
Strchr(char* , char):返回第二个参数在第一个参数中首次出现的位置;
Strrchr(char* , char): 返回第二个参数在第一个参数中最后一次出现的位置;
Strpbrk(char* , char*):返回第二个参数和第一个参数第一次出现相同字符的位置;
Strstr(char* , char*):字符串匹配,返回第二个参数第一次出现在第一个参数中的位置;
Strlen(char*):返回字符串的长度;
Strspn(char* , char*);返回第一个参数从头开始连续在第二个参数中出现的字符个数;
Strcspn(char* , char*):返回第一个参数中从头开始连续在第二个参数中没有出现的字符个数;
以上函数的头文件都为<string.h>,但是如下三个的头文件是<ctype.h>
Toupper(char):将参数转换为大写;
Tolower(char):将参数转换为小写;
Toascii(char)将参数转换为ascii码;
#include "stdio.h" #include "stdlib.h" #include "string.h" #include "ctype.h" void cmp() { printf("---------------------------------字符串比较函数---------------------------------\n"); char a[] = "BSLbaishilei" ; char b[] = "bslbaishilei" ; char c[] = "bslbaia989ds" ; printf("用于测试的变量 a = %s\n",a); printf("用于测试的变量 b = %s\n",b); printf("用于测试的变量 c = %s\n",c); if(strcmp(a,b)==0) printf("strcmp()执行结果: a[] -> %s 等于 b[] -> %s\n",a,b); else if(strcmp(a,b)>0) printf("strcmp()执行结果: a[] -> %s 大于 b[] -> %s\n",a,b); else if(strcmp(a,b)<0) printf("strcmp()执行结果: a[] -> %s 小于 b[] -> %s\n",a,b); //-------------------------------------------------------------------------- if(strcasecmp(a,b)==0) printf("strcasecmp()执行结果: a[] -> %s 等于 b[] -> %s\n",a,b); else if(strcasecmp(a,b)>0) printf("strcasecmp()执行结果: a[] -> %s 大于 b[] -> %s\n",a,b); else if(strcasecmp(a,b)<0) printf("strcasecmp()执行结果: a[] -> %s 小于 b[] -> %s\n",a,b); //-------------------------------------------------------------------------- if(strncasecmp(a,c,7)==0) printf("strncasecmp()执行结果: a[] -> %s 等于 c[] -> %s\n",a,c); else if(strncasecmp(a,c,7)>0) printf("strncasecmp()执行结果: a[] -> %s 大于 c[] -> %s\n",a,c); else if(strncasecmp(a,c,7)<0) printf("strncasecmp()执行结果: a[] -> %s 小于 c[] -> %s\n",a,c); //-------------------------------------------------------------------------- if(strcoll(a,c)==0) printf("strcoll()执行结果: a[] -> %s 等于 c[] -> %s\n",a,c); else if(strcoll(a,c)>0) printf("strcoll()执行结果: a[] -> %s 大于 c[] -> %s\n",a,c); else if(strcoll(a,c)<0) printf("strcoll()执行结果: a[] -> %s 小于 c[] -> %s\n",a,c); } void change() { printf("---------------------------------字符串转换函数---------------------------------"); char a[] = "abcDEF012" ; printf("用于测试的变量 a = %s\n",a); printf("\ntoupper()执行结果:"); for(int i = 0 ; i < strlen(a) ; i ++) printf("%c",toupper(a[i])); //-------------------------------------------------------------------------- printf("\ntolower()执行结果:"); for(int i = 0 ; i < strlen(a) ; i ++) printf("%c",tolower(a[i])); //-------------------------------------------------------------------------- printf("\ntoascii()执行结果:"); for(int i = 0 ; i < strlen(a) ; i ++) printf("%c->%d ",a[i],toascii(a[i])); printf("\n"); } void cpy() { printf("---------------------------------字符串转换函数---------------------------------\n"); char a[]="bsl" ; char b[]="baishilei" ; char c[30] ; char *p ; printf("用于测试的变量 a = %s\n",a); printf("用于测试的变量 b = %s\n",b); printf("用于测试的变量 c = %s\n",c); strcpy(c,a); printf("strcpy(c,a)执行结果:c = %s\n",c); strcat(c,b); printf("strcat(c,b)执行结果:c = %s\n",c); //-------------------------------------------------------------------------- strncpy(c,b,3); printf("strncpy(c,b,3)执行结果:c = %s\n",c); strncat(c,a,3); printf("strncat(c,b,3)执行结果:c = %s\n",c); //-------------------------------------------------------------------------- strncpy(c,a,4); printf("strncpy(c,a,4)执行结果:c = %s\n",c); //-------------------------------------------------------------------------- p = strdup(a); printf("strdup(a)执行结果:*p = %s\n",p); } void knief() { printf("---------------------------------字符串分割函数---------------------------------\n"); char a[] = "a-b-c-d ; d-e ,,, ! f-g ---edf --- " ; char *p ; printf("strtok()执行之前:s = %s\n",a); printf("strtok()执行之后:s = %s",strtok(a,"-")); while( p = strtok(NULL,"-")) printf("%s",p); printf("\n"); } void spn() { printf("---------------------------------字符串计算函数---------------------------------\n"); char a[] = "bslj012kh" ; char b[] = "0123456789baslk" ; char c[] = "jh012mn" ; printf("用于测试的变量 a = %s\n",a); printf("用于测试的变量 b = %s\n",b); printf("用于测试的变量 c = %s\n",c); printf("strspn(a,b)的执行结果:%d\n",strspn(a,b)); printf("strcspn(c,b)的执行结果:%d\n",strcspn(c,b)); } void find() { printf("---------------------------------字符串查找函数---------------------------------\n"); char a[] = "bslbaishilei" ; char b[] = "hahaha" ; char c[] = "shi"; printf("用于测试的变量 a = %s\n",a); printf("用于测试的变量 b = %s\n",b); printf("用于测试的变量 c = %s\n",c); printf("strchr(a,'i')执行结果:%s\n",strchr(a,'i')); printf("strrchr(a,'i')执行结果:%s\n",strrchr(a,'i')); printf("strpbrk(a,b)执行结果:%s\n",strpbrk(a,b)); printf("strstr(a,c)执行结果:%s\n",strstr(a,c)); } int main(int argc,char* argv) { cmp(); change(); cpy(); knief(); spn(); find(); printf("-------------------------------------Ending-------------------------------------\n"); system("pause"); return 0 ; } |
相关文章推荐
- iPhone、iPad强制关机
- wind 7 配置示图
- ListView万能适配器
- vim+clipboard+vim-gui(gvim)源码编译
- Notepad++关联文件扩展名,修改字体大小
- toString--->转字符串
- 解决切换jdk编译android源码错误
- Maven Tomcat 部署
- TMS320F28335时钟(1) -----PLL倍频器的初始化详解
- BZOJ 4103 [Thu Summer Camp 2015]异或运算 可持久化Trie
- [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
- C++ 的名字查找(name lookup)
- lcp+dp Codeforces611D New Year and Ancient Prophecy
- android5.1中apn选项默认选择制式源码修改
- org.openqa.selenium.StaleElementReferenceException
- 前端学PHP之基础语法
- 启示录
- android5.1源码中加全局变量
- 语言相关
- POJ1064 Cable master(二分)