C++ string的基本用法
string的初始化
string str1 = "hello world"; // str1 = "hello world" string str2("hello world"); // str2 = "hello world" string str3 = str1; // str3 = "hello world" string str4(str2); // str4 = "hello world" string str5(10,'h'); // str5 = "hhhhhhhhhh" string str6 = string(10,'h'); // str6 = "hhhhhhhhhh" string str7(str1,6); // str7 = "world" 从字符串str1第6个字符开始到结束,拷贝到str7中 string str8 = string(str1,6); // str8 = "world" string str9(str1,0,5); // str9 = "hello" 从字符串str1第0个字符开始,拷贝5个字符到str9中 string str10 = string(str1,0,5); // str10 = "hello" char c[] = "hello world"; string str11(c,5); // str11 = "hello" 将字符数组c的前5个字符拷贝到str11中 string str12 = string(c,5); // str12 = "hello"
如果:
string str13 = string("hello world",5) // str13 = "hello" 而非 " world"
此时,"hello world"应看作字符数组(参见str11),而非string对象(参见str7)
获取长度(两种方法无区别)
string str = "hello world"; cout << str.length(); //11 cout << str.size(); //11
插入
string str = "hello world"; string str2 = "hard "; string str3 = "it is so happy wow"; //s.insert(pos,n,ch) 在字符串s的pos位置上面插入n个字符ch str.insert(6,4,'z'); // str = "hello zzzzworld" //s.insert(pos,str) 在字符串s的pos位置插入字符串str str.insert(6,str2); // str = "hello hard world" //s.insert(pos,str,a,n) 在字符串s的pos位置插入字符串str中位置a到后面的n个字符 str.insert(6,str3,6,9); // str = "hello so happy world" //s.insert(pos,cstr,n) 在字符串s的pos位置插入字符数组cstr从开始到后面的n个字符 //此处不可将"it is so happy wow"替换为str3 str.insert(6,"it is so happy wow",6); // str = "hello it is world"
替换
string str = "hello world"; string str2 = "hard "; string str3 = "it is so happy wow"; //s.replace(p0,n0,n,ch) 删除p0开始的n0个字符,然后在p0处插入n个字符ch str.replace(0,6,4,'z'); // str = "zzzzworld" //s.replace(p0,n0,str) 删除从p0开始的n0个字符,然后在p0处插入字符串str str.replace(0,6,str2); // str = "hard world" //s.replace(p0,n0,str,pos,n) 删除p0开始的n0个字符,然后在p0处插入字符串str中从pos开始的n个字符 str.replace(0,6,str3,6,9); // str = "so happy world" //s.replace(p0,n0,cstr,n) 删除p0开始的n0个字符,然后在p0处插入字符数组cstr的前n个字符 //此处不可将"it is so happy wow"替换为str3 str.replace(0,6,"it is so happy wow",6); // str = "it is world"
添加
string str = "hello world"; string str2 = "hard "; string str3 = "it is so happy wow"; //s.append(n,ch) 在当前字符串结尾添加n个字符c str.append(4,'z'); // str = "hello worldzzzz" //s.append(str) 把字符串str连接到当前字符串的结尾 str.append(str2); // str = "hello worldhard " //s.append(str,pos,n) 把字符串str中从pos开始的n个字符连接到当前字符串的结尾 str.append(str3,6,9); // str = "hello worldso happy " //append(cstr,int n) 把字符数组cstr的前n个字符连接到当前字符串结尾 //此处不可将"it is so happy wow"替换为str3 str.append("it is so happy wow",6); // str = "hello worldit is "
赋值
string str; string temp = "welcome to my blog"; //s.assign(n,ch) 将n个ch字符赋值给字符串s str.assign(10,'h'); // str = "hhhhhhhhhh" //s.assign(str) 将字符串str赋值给字符串s str.assign(temp); // str = "welcome to my blog" //s.assign(str,pos,n) 将字符串str从pos开始的n个字符赋值给字符串s str.assign(temp,3,7); // str = "come to" //s.assaign(cstr,n) 将字符数组cstr的前n个字符赋值给字符串s //此处不可将"it is so happy wow"替换为temp str.assign("welcome to my blog",7); // str = "welcome"
删除
string str = "welcome to my blog"; //s.erase(pos,n) 把字符串s从pos开始的n个字符删除 str.erase(11,3); // str = "welcome to blog"
剪切
string str = "The apple thinks apple is delicious"; //s.substr(pos,n) 得到字符串s位置为pos后面的n个字符组成的串 string s1 = str.substr(4,5); // s1 = "apple" //s.substr(pos) 得到字符串s从pos到结尾的串 string s2 = str.substr(17); // s2 = "apple is delicious"
比较
string str1 = "small leaf"; string str2 = "big leaf"; //s.compare(str) 比较当前字符串s和str的大小 cout << str1.compare(str2); // 1 //s.compare(pos,n,str) 比较当前字符串s从pos开始的n个字符与str的大小 cout << str1.compare(2,7,str2); // -1 //s.compare(pos,n0,str,pos2,n) 比较当前字符串s从pos开始的n0个字符与str中pos2开始的n个字符组成的字符串的大小 cout << str1.compare(6,4,str2,4,4); // 0 //s.compare(pos,n0,cstr,n) 比较当前字符串s从pos开始的n0个字符与字符数组cstr中前n个字符的大小 //此处不可将"big leaf"替换为str2 cout << str1.compare(6,4,"big leaf",4); // 1
交换
string str1 = "small leaf"; string str2 = "big leaf"; //或者str1.swap(str2) ,输出结果相同 swap(str1,str2); // str1 = "big leaf" str2 = "small leaf" swap(str1[0],str1[1]); // str1 = "ibg leaf"
反装
string str = "abcdefghijklmn"; reverse(str.begin(),str.end()); // str = "nmlkjihgfedcba"
数值转换
to_string(val) //把val转换成string stoi(s,p,b) //把字符串s从p开始转换成b进制的int stol(s,p,b) //把字符串s从p开始转换成b进制的long stoul(s,p,b) //把字符串s从p开始转换成b进制的unsigned long stoll(s,p,b) //把字符串s从p开始转换成b进制的long long stoull(s,p,b) //把字符串s从p开始转换成b进制的unsigned long long stof(s,p) //把字符串s从p开始转换成float stod(s,p) //把字符串s从p开始转换成double stold(s,p) //把字符串s从p开始转换成long double
迭代器
string str = "abcdefghijklmn"; //s.begin() 返回字符串s第一个字符的位置 char a = *(str.begin()); // a //s.end() 返回字符串s最后一个字符串的后一个位置 char b = *(str.end()-1); // n //s.rbegin() 返回字符串s最后一个字符的位置 char c = *(str.rbegin()); // n //s.rend() 返回字符串s第一个字符的前一个位置 char d = *(str.rend()-1); // a
查找
find函数
string str = "The apple thinks apple is delicious"; //长度34 string key = "apple"; //s.find(str) 查找字符串str在当前字符串s中第一次出现的位置 int pos1 = str.find(key); // 4 //s.find(str,pos) 查找字符串str在当前字符串s的[pos,end]中第一次出现的位置 int pos2 = str.find(key, 10); // 17 //s.find(cstr,pos,n) 查找字符数组cstr前n的字符在当前字符串s的[pos,end]中第一次出现的位置 //此处不可将"delete"替换为str2(如果定义str2 = "delete") int pos3 = str.find("delete", 0, 2); // 26 //s.find(ch,pos) 查找字符ch在当前字符串s的[pos,end]中第一次出现的位置 int pos4 = str.find('s', 0); // 15
rfind函数
//s.rfind(str) 查找字符串str在当前字符串s中最后一次出现的位置 int pos5 = str.rfind(key); // 17 //s.rfind(str,pos) 查找字符串str在当前字符串s的[0,pos+str.length()-1]中最后一次出现的位置 int pos6 = str.rfind(key, 16); // 4 //s.rfind(cstr,pos,n) 查找字符数组cstr前n的字符在当前字符串s的[0,pos+n-1]中最后一次出现的位置 //此处不可将"apple"替换为key int pos7 = str.rfind("apple", 40, 2); // 17 //s.rfind(ch.pos) 查找字符ch在当前字符串s的[0,pos]中最后一次出现的位置 int pos8 = str.rfind('s', 30); // 24
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?