c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol
这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的
1、strlen函数:计算目标字符串长度,
格式:strlen(字符指针指向区域)
注意1:①不包含字符串结束符‘\0’
②需要导入库<string>
注意2:strlen常常会和sizeof混淆,比如:
这里是一些伪代码: //打开一个文件,然后写操作 int fd = open("我是文件", O_WRONLY); //写 char buf[256]; int num = 1; while(1) { memset(buf, 0x00, sizeof(buf)); //循环写 sprintf(buf, "xiaoming%04d", num++); //strlen只是获取buf中字符串的长度 write(fd, buf, strlen(buf)); sleep(1); } //关闭描述符 closde(fd);
--------------------------------------------------- //打开一个文件(上面写之后的),然后读操作 int fd = open(argv[1], O_RDONLY); char buf[256]; int ret = 0; while(1) { //循环读 //sizeof是求整个buf的大小 ret = read(fd, buf, sizeof(buf)); if (ret > 0) { printf("read:%s\n", buf); } } //关闭描述符 closde(fd);
2.拷贝函数:strcpy 参数: 目标字符串 源字符串
格式strcpy(目标字符串 ,源字符串 );
注拷贝字符串时会将/0也拷贝
注意:strcpy使用时,目标字符串长度如果小于源字符串,会溢出(bufferOverflow),报错。
有限拷贝:strncpy 参数: 目标字符串 源字符串 字符长度
格式:strcpy(目标字符串 ,源字符串 ,长度);
成功:返回目标字符串的首地址
失败:NULL
注:有限拷贝不会将\0拷贝到目标字符串中
复制内存:memcpy() 参数:void *memcpy(void * dest, const void * src, size_t num);
memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上。
memcpy()并不关心被复制的数据类型,只是逐字节地进行复制
注意:
①dest 指针要分配足够的空间,也即大于等于 num字节的空间。如果没有分配空间,会出现断错误。
②会完整的复制 num个字节,不会因为遇到“\0”而结束
3、追加函数/有限追加函数 strcat/strncat:
由于std::string和char*转换比较容易,推荐直接用c++进行字符串拼接等操作
格式:strcat(目标字符串 ,源字符串) // 将源字符串连接到目标字符串的尾部
格式:strncat(目标字符串 ,源字符串,长度n)//将源字符串前n个连接到目标字符串的尾部
注:①被追加的目标字符串 需要有足够空间
②追加中 先去掉 目标字符串中的 \0 再进行追加将 源字符串中的\0也追加上
③有限追加注意:有限追加也会将\0追加
4、比较函数/有限比较函数strcmp/strncmp
和字符串拼接一样,c++重载了运算符,可以使用"==" "!="进行字符串比较
格式:strcmp(字符串 1,字符串 2)// 比较1与2
格式:strcmp(字符串 1,字符串 2,比较长度n) // 比较1与2前n个字符串
注: ①在不同操作系统中strcmp结果会不同 有的返回1 0 -1 还可能返回ASCII差值
②字符串操作都是在\0结尾之前
5、字符串转化函数 sprintf / sscanf:
数据格式化后放入在字符串中
sprintf使用的较多,使用场景比如,1.获取时间戳,格式化时间格式;2.日志文件系统写入格式化;3.浮点数小数点后精度保留;...等
格式: sprintf(目标字符串 ,"参数",源字符串 )// 根据参数将源字符串来转换并格式化数据,然后将结果输出到指定的目标字符串中
scanf(目标字符串 ,"参数",&源字符串 ) //根据参数将源字符串来转换并格式化数据,然后将结果输入到指定的目标字符串中
注意:①sscanf与scanf一样需要在程序开始加入警告
②成功时返回具体个数 失败 -1
6、在字符串中查找字符的位置 strchr函数:
推荐使用c++的find函数
格式: strchar(字符串,‘字符’) // 失败返回空的值(UNLL)
注意 :①找汉字时格式 “ 汉字 ”,是双引号非单引号
② 字符使用单引号引起来
7、在字符串中查找另外字符串的位置 strstr函数:
推荐使用c++的find函数
格式 strstr(源字符串,“匹配字符串”)
注意: 匹配字符串使用双引号引起来
8、字符串分割 strtok函数
我用的很少,一般是自己用c++封装split方法,其中要用到c++的流和getline函数
getline两种用法:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
void split(const std::string &s, std::vector<std::string> &sv, const char delimiter = ' ') { sv.clear(); std::istringstrem iss(s); std::string temp; //getline会通过流ss,在遇到delimiter之前,将之前的字符串写入temp中 while (getline(iss, temp, delimiter)) { sv.push_bash(temp); } return; }
格式 strtok(目标字符串,“目标字符串中所包含的字符”)
注意:① 将切割点用\0表示,切完之后会破坏原先字符串样式
②当连续出现多个分割字符时只替换第一个为\0
9、atoi 转整形 /atof转 双精度 /atol转long类型 :
格式: atoi(目标字符串) / atof(目标字符串) / atol(目标字符串)
注意:①跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符('\0')才结束转换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2019-04-19 统计学与概率论的区别