【c++】string详解
参考: https://www.cnblogs.com/this-543273659/archive/2011/07/21/2113172.html 感谢博主
我能不用char*就不用,而使用C++标准程序库中的string类。string不必担心内存、字符长度等等的问题,并且string作为一个类,它的操作函数能够基本满足我的需要。string使用起来非常简单,我们用=赋值,用==比较是否相同,用+合并字符等等。
使用之前需要包含头文件 #include<string>
1.声明字符,调用构造函数初始化字符串
a.将strA赋值为空字符。
- string strA;
b.复制字符串赋初值,将“B"赋值给strB,将strB赋值给strA。
- 1 string strB("B");
- 2 string strA(strB);
c.截取字符串,赋初值
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4 int main()
- 5 {
- 6 string strA("ABCDEF");
- 7 string strB(strA, 1);//从1开始截取到最后
- 8 cout << strB << endl;
- 9 string strC(strA, 1, 2);//从1开始截取2位
- 10 cout << strC << endl;
- 11 string strD(strA, 1, 20000);//从1开始截取到最后
- 12 cout << strD << endl;
- 13 // string strE(strA, 10000, 2);//错误
- 14 // cout << strE << endl;
- 15 cin.get();
- 16 return 0;
- 17 }
d.将C字符串作为strA的初值???没搞懂CString?
- string strA(cstr); //将CString作为s的初值
e.将C字符串前chars_len个字符作为字符串strA的初值。???没搞懂CString?
- string strA(chars,chars_len);
f. string s(num,c) //生成一个字符串,包含num个c字符
g. string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
h. s.~string() //销毁所有字符,释放内存
2.字符串操作函数
a. 赋新值=,assign()
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4 int main()
- 5 {
- 6 string strA;
- 7
- 8 strA = "A";
- 9 cout << strA << endl;
- 10
- 11 strA.assign("B");
- 12 cout << strA << endl;
- 13
- 14 cin.get();
- 15 return 0;
- 16 }
b. 交换两个字符串的内容swap()
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4 int main()
- 5 {
- 6 string strA("A");
- 7 string strB("B");
- 8 cout << strA << endl;
- 9 cout << strB << endl;
- 10
- 11 strA.swap(strB);
- 12 cout << strA << endl;
- 13 cout << strB << endl;
- 14 cin.get();
- 15 return 0;
- 16 }
c. 在尾部添加字符+=,append(),push_back()
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4 int main()
- 5 {
- 6 string strA("A");
- 7 string strB("B");
- 8
- 9 strA += strB;//AB
- 10 strA += "C"; //ABC
- 11 strA += "DD"; //ABCD
- 12 cout << strA << endl;
- 13
- 14 strA.append("E");//ABCDE
- 15 strA.append("F");//ABCDEF
- 16 strA.append("GG");//ABCDEFGG
- 17 cout << strA << endl;
- 18
- 19 strA.push_back('H');//添加元素 ABCDEFGGH
- 20 strA.push_back('I');//ABCDEFGGHI
- 21 strA.push_back('J');//ABCDEFGGHIJ
- 22 strA.push_back('J');//ABCDEFGGHIJJ
- 23 cout << strA << endl;
- 24
- 25 cin.get();
- 26 return 0;
- 27 }
d. 插入字符 insert()
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4
- 5 void main()
- 6 {
- 7 string strA = "ABCDE";
- 8
- 9 strA.insert(1, "插入"); //在A后面插入
- 10 cout << strA << endl;
- 11
- 12 strA.insert(0, "头部"); //在头部插入
- 13 cout << strA << endl;
- 14
- 15 strA.insert(strA.size(), "尾部"); //在尾部插入
- 16 cout << strA << endl;
- 17
- 18 cin.get();
- 19 }
e. 删除字符erase()、clear()
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4
- 5 void main()
- 6 {
- 7 string strA = "ABCD";
- 8 strA.erase(1, 2); //从索引1开始 删除2个字符 即删除了BC
- 9 cout << strA << endl;
- 10 strA.erase(0,strA.size()); //全部清空
- 11 strA.clear(); //全部清空
- 12 cin.get();
- 13 }
f. 删除字符replace()
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4
- 5 void main()
- 6 {
- 7 string strA = "ABCDEFG";
- 8 strA.replace(2, 3, "王牌飞行员"); //从索引2开始3个字节的字符全替换成"王牌飞行员"
- 9 //strA.replace(2, 0, "王牌飞行员");//replace()相当于insert()
- 10 //strA.replace(2, 0, ""); //replace()相当于erase()
- 11 //strA.replace(0, strA.size(), "");//replace()相当于clear()
- 12 cout << strA << endl;
- 13 cin.get();
- 14 }
g. 合并字符串 +
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4
- 5 void main()
- 6 {
- 7 string strA = "A";
- 8 string strB = "B";
- 9 strA = strA + strB + "合并";
- 10 cout << strA << endl;
- 11 cin.get();
- 12 }
h. 比较字符串==,!=,<,<=,>,>=,compare()
根据“当前字符特性”将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4
- 5 void main()
- 6 {
- 7 cout << "ascii,A" << int('A') << endl;
- 8 cout << "ascii,B" << int('B') << endl;
- 9
- 10 string strA = "A";
- 11 if (strA == "A") cout << "相等" << endl;
- 12 if (strA != "B") cout << "A不等于B" << endl;
- 13 if ("A" < "B") cout << "A<B" << endl;
- 14 if ("1299" < "13") cout << "1299<13" << endl;// 第一位相同 第二位2<3 比较结束
- 15
- 16 cin.get();
- 17 }
i. 返回字符数量 size(),length(),两者没有区别
- 1 #include <string>
- 2 #include <iostream>
- 3 using namespace std;
- 4
- 5 void main()
- 6 {
- 7 string strA = "A汉123";
- 8 cout << strA.size() << endl;//6
- 9 cin.get();
- 10 }
【c++】string详解的更多相关文章
- Java的String详解
Java的String详解 博客分类: Java javaStringString详解常用方法 Java的String类在开发时经常都会被使用到,由此可见String的重要性.经过这次认真仔细的学习 ...
- Python操作redis字符串(String)详解 (三)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...
- [读书笔记]C#学习笔记八:StringBuilder与String详解及参数传递问题剖析
前言 上次在公司开会时有同事分享windebug的知识, 拿的是string字符串Concat拼接 然后用while(true){}死循环的Demo来讲解.其中有提及string操作大量字符串效率低下 ...
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
- Java堆、栈和常量池以及相关String详解
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
- String 详解
String String对象不可变,当对象创建完毕之后,如果内容改变则会创建一个新的String对象,返回到原地址中. 不可变优点: 多线程安全. 节省空间,提高效率. 源码: public fin ...
- java String 详解
1.java语言的字符串序列是通过字符串类实现的.java提供了3个字符串类:String类.StringBuilder类和StringBuffer类.String类是不变字符串,StringBuff ...
- String详解
在开发中,我们都会频繁的使用String类,掌握String的实现和常用方法是必不可少的,当然,我们还需要了解它的内部实现. 一. String的实现 在Java中,采用了一个char数组实现Stri ...
- C#String详解
字符串:stringLength - 字符串的长度. TrimStart() 压缩空格即消除字符串开始空格TrimEnd() 消除结尾空格Trim() 同时消除开头和结尾空格.注:中间空格不消除,因为 ...
随机推荐
- 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素
[python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...
- 【python】Leetcode每日一题-搜索排序数组2
[python]Leetcode每日一题-搜索排序数组2 [题目描述] 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k( ...
- vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
一.将本地项目上传到github 1.创建本地仓库(文件夹) mkdir study//创建文件夹studycd study //进入study文件夹 2.通过命令git init把这个文件夹变成Gi ...
- 一文带你详细介绍c++中的std::move函数
前言 在探讨c++11中的Move函数前,先介绍两个概念(左值和右值) 左值和右值 首先区分左值和右值 左值是表达式结束后依然存在的持久对象(代表一个在内存中占有确定位置的对象) 右值是表达式结束时不 ...
- ALPHA任务拆解
项目 内容 这个作业属于哪个课程 BUAA2020软件工程 这个作业的要求在哪里 作业要求 我们在这个课程的目标是 学会团队合作,共同开发一个完整的项目 这个作业在哪个具体方面帮助我们实现目标 团队任 ...
- path自定义转换器
register-converter用于注册转换器
- .Net·如何快速上手一个项目?
阅文时长 | 0.61分钟 字数统计 | 1029.6字符 主要内容 | 1.引言&背景 2.步入正题,如何快速上手一个项目? 3.声明与参考资料 『.Net·如何快速上手一个项目?』 编写人 ...
- [c++] 如何流畅地读写代码
代码不同于普通文字,阅读时注意两方面: 符号含义:相同符号,上下文不同时含义也不同,如*和& 阅读顺序:不总是按从左往右顺序阅读的,有时要倒着读或者跳着读逻辑才通顺 适当省略:有些内容虽然写了 ...
- [DB] Memcache
什么是Memcache Redis的前身 严格来说只能叫缓存,不支持持久化,停电后数据丢失 Strom.Spark Streaming实时计算的结果一般会保存在Redis中 JDBC是性能瓶颈 关系型 ...
- mysql基础之忘掉密码解决办法及恢复root最高权限办法
如果忘记了mysql的root用户的密码,可以使用如下的方法,重置root密码. 方法一: 1.停止当前mysql进程 systemctl stop mariadb 2.mysql进程停止后,使用如下 ...