C语言字符操作函数大全

mac2022-06-30  72

1、字符串分割函数头文件:#include <string.h>定义函数:char * strtok(char *s, const char *delim);函数说明:strtok()用来将字符串分割成一个个片段. 参数s 指向欲分割的字符串, 参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符. 在第一次调用时,strtok()必需给予参数s 字符串, 往后的调用则将参数s 设置成NULL. 每次调用成功则返回下一个分割后的字符串指针.返回值:返回下一个分割后的字符串指针, 如果已无从分割则返回NULL.范例#include <string.h>main(){    char s[] = "ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";    char *delim = "-: ";    char *p;    printf("%s ", strtok(s, delim));    while((p = strtok(NULL, delim)))        printf("%s ", p);        printf("\n");}执行结果:ab cd ef;gh i jkl;mnop;qrs tu vwx y;z //-与:字符已经被\0 字符取代

2、字符串查找函数头文件:#include <string.h> 定义函数:char *strstr(const char *haystack, const char * needle); 函数说明:strstr()会从字符串haystack 中搜寻字符串needle, 并将第一次出现的地址返回. 返回值:返回指定字符串第一次出现的地址, 否则返回0. 范例 #include <string.h> main() {     char * s = "012345678901234567890123456789";     char *p;     p = strstr(s, "901");     printf("%s\n", p); } 执行结果: 9.01E+21

3、字符查找函数

头文件:#include <string.h> 定义函数:size_t strspn(const char *s, const char * accept); 函数说明:strspn()从参数s 字符串的开头计算连续的字符, 而这些字符都完全是accept 所指字符串中的字符.简单的说, 若strspn()返回的数值为n, 则代表字符串s 开头连续有n 个字符都是属于字符串accept 内的字符. 返回值:返回字符串s 开头连续包含字符串accept 内的字符数目. 范例 #include <string.h> main() {     char *str = "Linux was first developed for 386/486-based PCs. ";     char *t1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";     printf("%d\n", strspn(str, t1)); } 执行结果: 5 //计算大小写字母. 不包含" ", 所以返回Linux 的长度.

4、定位字符串中最后出现的指定字符头文件:#include <string.h>定义函数:char * strrchr(const char *s, int c);函数说明:strrchr()用来找出参数s 字符串中最后一个出现的参数c 地址, 然后将该字符出现的地址返回.返回值:如果找到指定的字符则返回该字符所在地址, 否则返回0.范例#include <string.h>main(){    char *s = "0123456789012345678901234567890";    char *p;    p = strrchr(s, '5');    printf("%s\n", p);}执行结果:567890

5、定位字符串中第一个出现的指定字符头文件:#include <include.h>定义函数:char *strpbrk(const char *s, const char *accept);函数说明:strpbrk()用来找出参数s 字符串中最先出现存在参数accept 字符串中的任意字符.返回值:如果找到指定的字符则返回该字符所在地址, 否则返回0.范例#include <string.h>main(){    char *s = "0123456789012345678901234567890"; char *p; p = strpbrk(s, "a1 839"); //1 会最先在s 字符串中找到    printf("%s\n", p);    p = strprk(s, "4398"); //3 会最先在s 字符串中找到    printf("%s\n", p);}执行结果:1.23E+29

6、复制字符串

头文件:#include <string.h>定义函数:char * strncpy(char *dest, const char *src, size_t n);函数说明:strncpy()会将参数src 字符串拷贝前n 个字符至参数dest 所指的地址.返回值:返回参数dest 的字符串起始地址.范例#inclue <string.h>main(){    char a[30] = "string(1)";    char b[] = "string(2)";    printf("before strncpy() : %s\n", a);    printf("after strncpy() : %s\n", strncpy(a, b, 6));}执行结果:before strncpy() : string(1)after strncpy() : string(1)

7、字符串连接

头文件:#inclue <string.h>定义函数:char * strncat(char *dest, const char *src, size_t n);函数说明:strncat()会将参数src 字符串拷贝n 个字符到参数dest 所指的字符串尾. 第一个参数dest 要有足够的空间来容纳要拷贝的字符串.返回值:返回参数dest 的字符串起始地址.范例#include <string.h>main(){    char a[30] = "string(1)";    char b[] = "string(2)";    printf("before strncat() :%s\n", a);    printf("after strncat() :%s\n", strncat(a, b, 6));}执行结果:before strncat() : string(1)after strncat() : string(1) string

8、字符串比较(忽略大小写)

头文件:#include <string.h>定义函数:int strncasecmp(const char *s1, const char *s2, size_t n);函数说明:strncasecmp()用来比较参数s1 和s2 字符串前n 个字符, 比较时会自动忽略大小写的差异.返回值:若参数s1 和s2 字符串相同则返回0. s1 若大于s2 则返回大于0 的值, s1 若小于s2 则返回小于0 的值.范例#include <string.h>main(){    char *a = "aBcDeF";    char *b = "AbCdEf";    if(!strncasecmp(a, b))    printf("%s =%s\n", a, b);}执行结果:aBcDef=AbCdEf

9、字符串长度计算

头文件:#include <string.h>定义函数:size_t strlen (const char *s);函数说明:strlen()用来计算指定的字符串s 的长度, 不包括结束字符"\0".返回值:返回字符串s 的字符数.范例:/*取得字符串str 的长度 */#include <string.h>main(){    char *str = "12345678";    printf("str length = %d\n", strlen(str));}执行结果:str length = 8

10、复制字符串

定义函数:char * strdup(const char *s);函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小, 然后将参数s 字符串的内容复制到该内存地址, 然后把该地址返回. 该地址最后可以利用free()来释放.返回值:返回一字符串指针, 该指针指向复制后的新字符串地址. 若返回NULL 表示内存不足.范例#include <string.h>main(){    char a[] = "strdup";    char *b;    b = strdup(a);    printf("b[]=\"%s\"\n", b);}执行结果:b[]="strdup"

11、复制字符串

定义函数:char *strcpy(char *dest, const char *src);函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址.返回值:返回参数dest 的字符串起始地址.附加说明:如果参数 dest 所指的内存空间不够大, 可能会造成缓冲溢出(buffer Overflow)的错误情况, 在编写程序时请特别留意, 或者用strncpy()来取代.范例#include <string.h>main(){    char a[30] = "string(1)";    char b[] = "string(2)";    printf("before strcpy() :%s\n", a);    printf("after strcpy() :%s\n", strcpy(a, b));}执行结果:before strcpy() :string(1)after strcpy() :string(2)

12、字符串比较

定义函数:int strcmp(const char *s1, const char *s2);函数说明:strcmp()用来比较参数s1 和s2 字符串. 字符串大小的比较是以ASCII 码表上的顺序来决定, 此顺序亦为字符的值. strcmp()首先将s1 第一个字符值减去s2 第一个字符值, 若差值为0 则再继续比较下个字符, 若差值不为0 则将差值返回. 例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33).返回值:若参数s1 和s2 字符串相同则返回0. s1 若大于s2 则返回大于0 的值. s1 若小于s2 则返回小于0 的值.范例#include <string.h>main(){    char *a = "aBcDeF";    char *b = "AbCdEf";    char *c = "aacdef";    char *d = "aBcDeF";    printf("strcmp(a, b) : %d\n", strcmp(a, b));    printf("strcmp(a, c) : %d\n", strcmp(a, c));    printf("strcmp(a, d) : %d\n", strcmp(a, d));}执行结果:strcmp(a, b) : 32strcmp(a, c) :-31strcmp(a, d) : 0

13、小写换大写

头文件:#include <ctype.h>定义函数:int toupper(int c);函数说明:若参数 c 为小写字母则将该对应的大写字母返回.返回值:返回转换后的大写字母, 若不须转换则将参数c 值返回.范例 /* 将s 字符串内的小写字母转换成大写字母 */#include <ctype.h>main(){    char s[] = "aBcDeFgH12345;!#$";    int i;    printf("before toupper() : %s\n", s);    for(i = 0; I < sizeof(s); i++)        s[i] = toupper(s[i]);        printf("after toupper() : %s\n", s);}执行结果:before toupper() : aBcDeFgH12345;!#$after toupper() : ABCDEFGH12345;!#$

14、大写换小写

头文件:#include <stdlib.h>定义函数:int tolower(int c);函数说明:若参数 c 为大写字母则将该对应的小写字母返回.返回值:返回转换后的小写字母, 若不须转换则将参数c 值返回.范例/* 将s 字符串内的大写字母转换成小写字母 */#include <ctype.h>main(){    char s[] = "aBcDeFgH12345;!#$";    int i;    printf("before tolower() : %s\n", s);    for(i = 0; I < sizeof(s); i++)         s[i] = tolower(s[i]);         printf("after tolower() : %s\n", s);}执行结果:before tolower() : aBcDeFgH12345;!#$after tolower() : abcdefgh12345;!#$

15、字符串换成整数

头文件:#include <stdlib.h>定义函数:int atoi(const char *nptr);函数说明:atoi()会扫描参数nptr 字符串, 跳过前面的空格字符, 直到遇上数字或正负符号才开始做转换, 而再遇到非数字或字符串结束时('\0')才结束转换, 并将结果返回.返回值返回转换后的整型数.附加说明:atoi()与使用strtol(nptr, (char**)NULL, 10); 结果相同.范例/* 将字符串a 与字符串b 转换成数字后相加 */#include <stdlib.h>main(){    char a[] = "-100";    char b[] = "456";    int c;    c = atoi(a) + atoi(b);    printf("c=%d\n", c);}执行结果:c=356

16、字符串换成浮点数

头文件:#include <stdlib.h>定义函数:double atof(const char *nptr);函数说明:atof()会扫描参数nptr 字符串, 跳过前面的空格字符, 直到遇上数字或正负符号才开始做转换, 而再遇到非数字或字符串结束时('\0')才结束转换, 并将结果返回. 参数nptr 字符串可包含正负号、小数点或E(e)来表示指数部分, 如123. 456 或123e-2.返回值:返回转换后的浮点型数.附加说明:atof()与使用strtod(nptr, (char**)NULL)结果相同.范例:/* 将字符串a 与字符串b 转换成数字后相加 */#include <stdlib.h>main(){    char *a = "-100.23";    char *b = "200e-2";    float c;    c = atof(a) + atof(b);    printf("c=%.2f\n", c);}执行结果:c=-98.23

17、字符串转换为长整型

头文件:#include <stdlib.h>定义函数:long atol(const char *nptr);函数说明:atol()会扫描参数nptr 字符串, 跳过前面的空格字符, 直到遇上数字或正负符号才开始做转换, 而再遇到非数字或字符串结束时('\0')才结束转换, 并将结果返回.返回值:返回转换后的长整型数.附加说明:atol()与使用strtol(nptr, (char**)NULL, 10); 结果相同.范例/*将字符串a 与字符串b 转换成数字后相加 */#include <stdlib.h>main(){    char a[] = "1000000000";    char b[] = " 234567890";    long c;    c = atol(a) + atol(b);    printf("c=%d\n", c);}执行结果:c=1234567890

18、字符串查找函数(返回最后一次出现的位置)头文件:#include <string.h>定义函数:char * rindex(const char *s, int c);函数说明:rindex()用来找出参数s 字符串中最后一个出现的参数c 地址, 然后将该字符出现的地址返回. 字符串结束字符(NULL)也视为字符串一部分.返回值:如果找到指定的字符则返回该字符所在的地址, 否则返回0.范例#include <string.h>main(){    char *s = "0123456789012345678901234567890";    char *p;    p = rindex(s, '5');    printf("%s\n", p);}执行结果:567890

19、字符串查找函数(返回首次出现的位置)

头文件:#include <string.h>定义函数:char * index(const char *s, int c);函数说明:index()用来找出参数s 字符串中第一个出现的参数c 地址, 然后将该字符出现的地址返回. 字符串结束字符(NULL)也视为字符串一部分.返回值:如果找到指定的字符则返回该字符所在地址, 否则返回0.范例#include <string.h>main(){    char *s = "0123456789012345678901234567890";    char *p;    p = index(s, '5');    printf("%s\n", p);}执行结果:5.68E+25

20、函数名: strncmp功  能: 串比较用  法: int strncmp(char *str1, char *str2, int maxlen);程序例:#include <string.h>#include <stdio.h>int  main(void){   char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";   int ptr;   ptr = strncmp(buf2,buf1,3);   if (ptr > 0)      printf("buffer 2 is greater than buffer 1\n");   else      printf("buffer 2 is less than buffer 1\n");   ptr = strncmp(buf2,buf3,3);   if (ptr > 0)      printf("buffer 2 is greater than buffer 3\n");   else      printf("buffer 2 is less than buffer 3\n");   return(0);}

 

转载于:https://www.cnblogs.com/jiang08/archive/2012/09/26/2704263.html

最新回复(0)