第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > c语言库函数总结----string.h库

c语言库函数总结----string.h库

时间:2021-06-22 02:58:59

相关推荐

c语言库函数总结----string.h库

前言

string.h库函数是工程中很常用的字符串操作库函数。

在这篇博客中总结一下常用的几个string.h有关的库函数,在工程中避免重复造轮子,换句话说提高工程效率

(* ̄︶ ̄)。

char *strcpy(char *destin, const char *source);

//函数原型:char *strcpy(char *destin, const char *source);

//函数功能:从source常量字符串首地址复制到destin地址

小细节:由于使用strcpy有可能造成内存的溢出,在工程中使用strcpy_s更为安全。

//时间:11月15日//作者:Kroner//编译环境:VS //库函数 string.h//函数原型:char *strcpy(char *destin, const char *source);//函数功能:从source常量字符串首地址复制到destin地址#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main(){char dest[10];const char* src = "123456";//可以尝试一下不加const是否会报错strcpy(dest, src) //在此处可以利用返回值进行连式编程,提高代码的灵活性printf_s("%s", dest);return 0;}

测试结果:

char *strncpy(char *destin, char *source, int len);

函数原型:char *strncpy(char *destin, char *source, int len);

功能:将source指向的len个字符串拷到destin。

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型:char *strncpy(char *destin, char *source, int len);//函数功能:将source指向的前len个字符串拷到destin。#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char dest[10];const char* src = "123456"; strncpy(dest, src, 3);dest[3] = '\0';printf("dest= %s, %s, %s", dest, dest + 4, dest + 5);//前三个字符是正确,后面的几个字符就是乱码return 0;}

测试结果:

char* strcat(char * str1,char * str2);

char* strcat(char * str1,char * str2);

功能: 把字符串str2接到str1后面,str1最后的’\0’被取消

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型:char* strcat(char * str1,char * str2);//函数功能:把字符串str2接到str1后面,str1最后的'\0'被取消#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char dest[20] = "abcd";const char* src = "123456";strcat(dest, src);printf_s("dest= %s", dest); // 这边输出是dest拼接srcreturn 0;}

测试结果:

char *strncat(char *dest, const char *src, size_t maxlen)

char *strncat(char *dest, const char *src, size_t maxlen)

功能: 将字符串src中前maxlen个字符连接到dest中

与strncpy不同,strncat会自动在末尾加‘\0’,若指定长度超过源字符串长度,则只复制源字符串长度即停止,更安全!

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型: char *strncat(char *dest, const char *src, size_t maxlen)//函数功能: 将字符串src中前maxlen个字符连接到dest中#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char dest[20] = "abcd";const char* src = "123456";strncat(dest, src,3);printf_s("dest= %s", dest); // 这边输出是dest拼接src的前三个数字return 0;}

int strcmp(char * str1,char * str2);

函数模板 : int strcmp(char * str1,char * str2);

函数功能: 比较两个字符串str1,str2,返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型: int strcmp(char * str1,char * str2);//函数功能: 比较两个字符串str1,str2,比较两个字符串str1,str2,返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char str1[5] = "abcd";char str2[5] = "abcd";char str3[5] = "1234";int ret1 = strcmp(str1,str2);printf_s("ret1 = %d\n",ret1);int ret2 = strcmp(str1, str3);printf_s("ret2 = %d", ret2);return 0;}

侧式结果:

//函数原型: int strcmp(char * str1,char * str2);在对两个字符串进行比较十分有用,当两个字符串相同时,返回值为0,不同时返回值不为0;

int strncmp(char *str1,char *str2,int count)

函数模板: int strncmp(char *str1,char *str2,int count)

函数功能: 比较两个字符串str1,str2,返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 int strncmp(char *str1,char *str2,int count)//函数功能: 功能: 对str1和str2中的前count个字符按字典顺序比较 返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char str1[6] = "abcd3";char str2[6] = "abcd2";int ret1 = strncmp(str1, str2, 4); //对比可以看出对比前四个字节是相同得 ret1 = 0;printf_s("ret1 = %d\n",ret1); //对比可以看出对比前五个字节是不完全相同得 ret1 = 1;int ret2 = strncmp(str1, str2, 5);printf_s("ret2 = %d", ret2);return 0;}

测试结果:

char* strchr(char* str,char ch);

char* strchr(char* str,char ch);

功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char* strchr(char* str,char ch);//函数功能: 功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char* strchr(char* str,char ch);//函数功能: 功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char str[20] = "1234568789abcdeabc";char *p1 = strchr(str,'a');char* p2 = strchr(str,'f');printf_s("str = %d\n", str);printf_s("p1 = %d\n", p1);printf_s("p2 = %d\n", p2);return 0;}

测试结果:测试结果和预测结果一致。后面我们学查找最后一个相同字符的函数strrchr();

char *strrchr(const char *s, int c)

函数模板:char *strrchr(const char *s, int c)

功能: 得到字符串s中最后一个含有被查字符的位置指针,返回: 最后被查相同位置指针

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char* strchr(char* str,char ch);//函数功能: 功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char str[20] = "1234568789abcdeabc";char *p1 = strrchr(str,'a');printf_s("str = %d\n", str);printf_s("p1 = %d\n", p1);return 0;}

测试结果:这个测试结果返回的是str+15就是最后一个字符a的地址,strrchr 比strchr多的 r 意指反向寻找,位置都是从1开始计数(非从0开始)

char* strstr(char* str1,char* str2);

函数原型:char* strstr(char* str1,char* str2);

功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 返回: 返回该位置的指针,如找不到,返回空指针

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char* strstr(char* str1,char* str2);//函数功能: 功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)返回: 返回该位置的指针, 如找不到, 返回空指针#include "stdlib.h"#include "stdio.h"#include "string.h"int main() {char str[] = "1234568789abcdeabc";char str2[] = "568";char str3[] = "567";char* p1 = NULL;char* p2 = NULL;p1 = strstr(str,str2);p2 = strstr(str, str3);printf_s("str = %d\n", str);printf_s("p1 = %d\n", p1);printf_s("p2 = %d\n", p2);return 0;}

测试结果:

char *strnset(char *s, int ch, size_t n)

函数原型:char *strnset(char *s, int ch, size_t n)

功能: 将字符串s中前n个字符设置为ch的值,返回: 指向s的指针

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char *strnset(char *s, int ch, size_t n)//函数功能: 将字符串s中前n个字符设置为ch的值,返回: 指向s的指针#pragma warning(disable:4996)#include "stdlib.h"#include "stdio.h"#include "string.h"int main(){char dest[10] = "abcdabc";char* rp = NULL;char ch = 'F';rp = strnset(dest, ch, 4); //预测结果dest的前四个字符都应该变为FFFFprintf("after strnset dest is %s \n", rp);return 0;}

测试结果:

char *strset(char *s, int ch)

函数原型:char *strset(char *s, int ch)

功能: 将字符串s中所有字符设置为ch的值返回: 指向s的指针,这个函数和上面char *strnset(char *s, int ch, size_t n)不同之处在于全部都置为相同的字符。

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char *strset(char *s, int ch, size_t n)//函数功能: 将字符串s中所有字符设置为ch的值返回: 指向s的指针#pragma warning(disable:4996)#include "stdlib.h"#include "stdio.h"#include "string.h"int main(){char dest[10] = "abcdabc";char* rp = NULL;char ch = 'F';rp = strset(dest, ch);printf("after strnset dest is %s \n", rp); //预测结果为全Freturn 0;}

测试结果:

char *strtok(char *s1, const char *s2)

函数原型:char *strtok(char *s1, const char *s2)

功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串

返回: 字符串s1中首次出现s2中的字符前的子字符串指针

strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char *strtok(char *s1, const char *s2)//函数功能: 分解s1字符串,用特定分隔符(s2)分隔成多个字符串 返回: 字符串s1中首次出现s2中的字符前的子字符串指针#pragma warning(disable:4996)#include "stdlib.h"#include "stdio.h"#include "string.h"int main(){char dest[] = "ab,cd,ef,c";char* rp;char ch[] = ",";rp = strtok(dest, ch);while ( rp != NULL ){printf("rp: %s \n", rp);rp = strtok(NULL, ch);}return 0;}

这个函数看起来麻烦其实作用很简单,就是通过一个字符对字符串进行切割。说明:尽量使用可重入版的strtok,Windows平台下为strtok_s,Linux平台下为strtok_r。牢记strtok函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。在使用strtok前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。

char *strupr(char *s)

函数原型 char *strupr(char *s)

函数功能: 将字符串s中的字符变为大写

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char *strupr(char *s)//函数功能: 将字符串s中的字符变为大写#pragma warning(disable:4996)#include "stdlib.h"#include "stdio.h"#include "string.h"int main(){char str[] = "abcdefg";char *strnew = NULL;strnew = strupr(str);printf_s("strnew = %s", strnew);return 0;}

测试结果:

char *strlwr(char *s)

函数原型 char *strlwr(char *s)

函数功能: 将字符串s中的字符变为小写

//时间:11月15日//作者:Kroner//编译环境:VS //库函数string.h//函数原型 char *strlwr(char *s)//函数功能: 将字符串s中的字符变为小写#pragma warning(disable:4996)#include "stdlib.h"#include "stdio.h"#include "string.h"int main(){char str[] = "ABCDEF";char *strnew = NULL;strnew = strlwr(str);printf_s("strnew = %s", strnew);return 0;}

测试结果:这个函数的测试结果和strupr相反

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。