![](/notes/imgs/wechat-color.jpg)
8. 常用函数-字符数组、字符串函数
发布时间:
cstring
#include <cstring> 是C++标准库中的头文件,它包含了一些用于C风格字符串操作的函数和常量。
函数 | 描述 |
---|---|
memcpy(void * dest,const void * src, sizet count) | 【内存拷贝】从src拷贝 count 个字节到 dest |
void * memset( void * dest,int c, sizet count) | 【内存设置】设置 dest 的前count 个字节为字符c |
size_t strlen( string) | 【字符串长度】不包括尾部 NULL |
| 函数格式 | 函数功能 | | strstr( string1, string2) | 【字符串包含】string1是否包含string2 | | strcat(字符串名1,字符串名2) | 【字符串连接】将字符串2连接到字符串1后边,返回字符串1的值。 | | strncat(字符串名1,字符串名2,长度n) | 【字符串连接】将字符串2前n个字符连接到字符串1后边,返回字符串1的值。 | | strcpy(字符串名1,字符串名2) | 复制:将字符串2复制到字符串1后边,返回字符串1的值。 | | strncpy(字符串名1,字符串名2,长度n) | 复制: 将字符串2前n个字符复制到字符串1后边,返回字符串1的值。 | | strcmp(字符串名1,字符串名2) | 比较: 比较字符串1和字符串2的大小,比较的结果由函数带回;
如果字符串1>字符串2,返回一个正整数;
如果字符串1=字符串2,返回0;
如果字符串1<字符串2,返回一个负整数; | | strncmp(字符串名1,字符串名2,长度n) | 比较:比较字符串1和字符串2的前n个字符进行比较,
函数返回值的情况同strcmp函数; | | strlen(字符串名) | 长度:计算字符串的长度,终止符’\0’不算在长度之内 | | strlwr(字符串名) | 转小写:将字符串中大写字母换成小写字母 | | strupr(字符串名) | 转大写:将字符串中小写字母换成大写字母 |
string
#include <string> 是C++标准库中的头文件,它包含了用于操作字符串的类和相关的函数。
string的多种构造方式:
string str1; //生成空字符串
string str2("123456789"); //生成"1234456789"的复制品
string str3("12345", 0, 3); //结果为"123"
string str4("012345", 5); //结果为"01234"
string str5(5, '1'); //结果为"11111"
string str6(str2, 2); //结果为"3456789"
函数 | 描述 | 样例 |
---|---|---|
length() | 求长度 | string s="123";s.ength(); |
size() | 求长度 | string s="123";s.size(); |
to_string(int a) | 数字转字符串 | string s=to_string(123); |
push_back(char a) | 尾部添加字符 | string s.push_back('A'); |
pop_back() | 尾部添加字符 | string s="123"; s.pop_back(); |
substr(int a) | 返回位置a以后的字符串 | string s="123345"; s.substr(2); |
substr(int a,int l) | 返回位置a以后l个长度字符串 | string s="123"; s.pop_back(2,2); |
resize(int l) | 改变字符串长度为l | string s="123"; s.resize(2); |
empty() | 字符串是否为空 | string s; s.empty(); |
>,>=,<,<=,==,!= | 字符串比较 | string (“aaaa”) <string(aaaaa) |
compare(string ) | 字符串比较 | string s(“abcd”); s.compare(“abcd”); //返回0 s.compare(“dcba”) ; //返回一个小于0的值 s.compare(“ab”); //返回大于0的值; s.compare(s); //相等 s.compare(0,2,s,2,2); //用”ab”和”cd”进行比较 小于零 s.compare(1,2,”bcx”,2); //用”bc”和”bc”比较 |
assign(str) | 字符串赋值 | s.assign(str); //不说 s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串 s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s s.assign(“gaint”); //不说 s.assign(“nico”,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘/0’赋给字符串 s.assign(5,’x’);//把五个x赋给字符串 |
--- | 字符串清空 | s=””;s.clear();s.erase() |
--- | 增加字符串 | s+=str;//加个字符串 s+=”my name is jiayp";//加个c字符串 s+='a";//加个字符 s.append (str); s.append(str, 1,3);//不解释了 同前面的函数参数assign的解释 s.append(str,2, string::npos)//不解释了 s.append (“my name is jiayp"); s.append ("nico", 5); s.append (5, 'x'); s.push back('a");1/这个西数只能增加单个字符对SrI熟悉的理解起来很简单 |
insert() | 插入字符串 | string s="123";s.insert(1,str); 不支持char |
erase() | 删除字符串 | string s="i18n”; s.erase (13);//从索引13开始往后全删除 s.erase (7,5);1/从索引7开始往后删5个 |
repiace() | 替换字符串 | string s="i18n”; s.repiace (1,2, "nternat ionalizatio”);1/从索号11开始的2个替换成后 |
--- | 字符串查找 | find( str,1,3); rfind();//从最后查找 find_first_of() find_last_of() find_first_not_of() find_last_not_of() 第一个参数是被搜寻的对象。第二个参数(可有可无)指出string内的搜寻起点索引,第三个参数(可有可无)指出搜寻的字符个数 |
string与cstring区别:
是C语言中的头文件,其中的函数和常量都是以C风格的字符串为参数和返回值。而 是C++中的头文件,其中的类和函数都是以C++的string对象为参数和返回值。 中的函数和常量都是全局的,需要使用命名空间std::来调用。而 中的类和函数都在std命名空间中,可以直接调用。 - .
中的函数和常量都是基于字符数组的操作,需要手动管理内存。而 中的类和函数都是基于string对象的操作,自动管理内存。 中的函数和常量是C语言中常用的字符串操作函数,如strcpy、strcat、strlen等。而 中的类和函数是C++中对字符串的封装和扩展,提供了更多的功能,如字符串拼接、查找、替换等。 中的函数和常量在使用时需要注意字符串的结束符'\0'。而 中的类和函数自动处理字符串的结束符,不需要额外的注意。 - 总的来说,
是C语言风格的字符串操作头文件,适用于需要与C代码交互或者对字符串的操作较简单的情况。而 是C++风格的字符串操作头文件,提供了更多的功能和便利性,适用于C++程序中对字符串的操作。 - cstring 可以理解为是 C语言库中 #include <string.h>的替换,为了满足某些程序员的使用习惯。