这里总结工作中经常用到的一些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')才结束转换
  
 
 

c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol的更多相关文章

  1. C 常见字符串操作函数

    头文件 <string.h> 1. char *strstr(const char *str1, const char *str2);      判断str2是否为str1的子串  //s ...

  2. 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。

    首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...

  3. mysql常见字符串处理函数结束

    一.简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2…,sn) 将s1,s2…,sn连接成字符串 CONCAT ...

  4. 字符串(NSString)及常见字符串处理函数

    从本系列文章的开始,我们就使用过字符串对象,但是我们却还没有比较详细的介绍过它.使用@符,再一对双引号将一组字符串引用起来,例如: @”In fact, Objective-C is very sim ...

  5. Python常见字符串方法函数

    1.大小写转换 S.lower() S.upper() 前者将S字符串中所有大写字母转为小写,后者相反 S.title() S.capitalize() 前者返回S字符串中所有单词首字母大写且其他字母 ...

  6. mysql常见字符串处理函数

  7. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  8. C 字符串操作函数

    针对C风格的字符串(char p[n];): 长度(strlen).追加(strcat, strncat).比较(strcmp, strncmp).查找(strchr, strstr)等. --带n的 ...

  9. php课程 6-22 字符串格式化函数有哪些(精问)

    php课程 6-22 字符串格式化函数有哪些(精问) 一.总结 一句话总结: 1.猜测一下$_GET()怎么来的? 函数赋值给变量的操作:$_YZM=get();   这样就可以很好的解释哪些全局变量 ...

随机推荐

  1. ICLR2021对比学习(Contrastive Learning)NLP领域论文进展梳理

    本文首发于微信公众号「对白的算法屋」,来一起学AI叭 大家好,卷王们and懂王们好,我是对白. 本次我挑选了ICLR2021中NLP领域下的六篇文章进行解读,包含了文本生成.自然语言理解.预训练语言模 ...

  2. CF1270G Subset with Zero Sum

    首先一定要从每个数的范围 \(i - n \le a_i \le i - 1\) 入手,最开始是这样一个想法,不难发现对于每个 \(i\) 都能选 \(n\) 个数,并且能选的右端点在 \(i - 1 ...

  3. JAVA类加载器一 父类委托机制

    感谢原文作者:不将就! 原文链接:https://www.cnblogs.com/byron0918/p/5770653.html 类加载器负责将.class文件加载到内存中,并为之生成对应的Clas ...

  4. Ajax创建对象的方法

    ajax涉及的技术包括Html.css.dom.xml.javascript等. 主流创建ajax对象的方法: IE6以下版本浏览器创建ajax对象方法是: 定义一个方法创建ajax对象:

  5. lua语言:string

    转载请注明来源:https://www.cnblogs.com/hookjc/ 字符串库函数string.len(s)          返回字符串s的长度:string.rep(s, n)      ...

  6. Docker安全及日志管理

    Docker安全及日志管理 目录 Docker安全及日志管理 一.Docker容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗 3. 总结 二.Docker存在的安全问题 1. Docker自身 ...

  7. Dockerfile镜像实例

    Dockerfile镜像实例 目录 Dockerfile镜像实例 一.构建SSH镜像 1. 建立工作目录 2. 生成镜像 3. 启动容器并修改root密码 二.systemctl镜像 1. 建立工作目 ...

  8. Shell之awk

    Shell之awk 目录 Shell之awk 一.awk概述 1. awk的工作原理 2. 命令格式 3. awk常见的内建变量(可直接用) 二.操作实例 1. 按行输出文本 2. 按字段输出文本 3 ...

  9. Mysql 占用字节大小

    数字类型 类型 字节数 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 FLOAT(X ...

  10. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...