string不是STL的容器(知道这一点的时候我也很吃惊),但是它与STL容器有着很多相似的操作,不需要担心长度问题,还封装了多种多样的方法,十分好用。


用到的库

#include  <string> 

声明

最基本:

string str; 

这是声明了一个空字符串

还有其他多种方法:

  • string s;  // 生成一个空字符串s
  • string s(str) ; // 拷贝构造函数生成str的复制品
  • string s(str, stridx);  // 将字符串str内"始于位置stridx"的部分当作字符串的初值
  • string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值
  • string s(cstr) ;  // 将C字符串(以NULL结束)作为s的初值
  • string s(chars, chars_len) ;  // 将C字符串前chars_len个字符作为字符串s的初值。
  • string s(num, ‘c’) ;  // 生成一个字符串,包含num个c字符
  • string s(“value”);  string s=“value”;  // 将s初始化为一个字符串字面值副本
  • string s(begin, end);  // 以区间begin/end(不包含end)内的字符作为字符串s的初值
  • s.~string();  //销毁所有字符,释放内存

我写了一个示例,便于理解:

#include<bits/stdc++.h>

using namespace std; 

int main(){
int n,i;
char cstr[]="cstr";
string str1="qwertyui";
string str2(str1);
string str3(str1,);
string str4(str1,,);
string str5(cstr);
string str6(cstr,);
string str7(,'a');
string str8("zxcv");
string str9(str1.begin(),str1.end());
cout<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl<<str6<<endl<<str7<<endl<<str8<<endl<<str9<<endl;
str1.~string(); }

运行结果如下:

qwertyui
qwertyui
wertyui
we
cstr
cs
aaaaa
zxcv
qwertyui

与C字符数组的比较

网上说了一大堆,我感觉最直接的区别,是如果s有三个字符,传统C的字符串的s[3]是’\0’字符,但是C++的string则是只到s[2]这个字符而已。

具体不同的用法 上图:

可以看到string在赋值、拼接还有比较等方面都更方便。

string对象的操作

string s;
) s.empty(); // s为空串 返回true
) s.size(); // 返回s中字符个数 类型应为:string::size_type
) s[n]; // 从0开始相当于下标访问
) s1+s2; // 把s1和s2连接成新串 返回新串
) s1=s2; // 把s1替换为s2的副本
) v1==v2; // 比较,相等返回true
) `!=, <, <=, >, >=` 惯有操作 任何一个大写字母都小于任意的小写字母

当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:

string s1(“hello”);
string s3=s1+”world”; //合法操作
string s4=”hello”+”world”; //非法操作:两个字符串字面值相加

string 函数

) =, s.assign() // 赋以新值
) swap() // 交换两个字符串的内容
) +=, s.append(), s.push_back() // 在尾部添加字符
) s.insert() // 插入字符
) s.erase() // 删除字符
) s.clear() // 删除全部字符
) s.replace() // 替换字符
) + // 串联字符串
) ==,!=,<,<=,>,>=,compare() // 比较字符串
) size(),length() // 返回字符数量
) max_size() // 返回字符的可能最大个数
) s.empty() // 判断字符串是否为空
) s.capacity() // 返回重新分配之前的字符容量
) reserve() // 保留一定量内存以容纳一定数量的字符
) [ ], at() // 存取单一字符
) >>,getline() // 从stream读取某值
) << // 将谋值写入stream
) copy() // 将某值赋值为一个C_string
) c_str() // 返回一个指向正规C字符串(C_string)的指针 内容与本string串相同 有’\0’
) data() // 将内容以字符数组形式返回 无’\0’
) s.substr() // 返回某个子字符串
) begin() end() // 提供类似STL的迭代器支持
) rbegin() rend() // 逆向迭代器
) get_allocator() // 返回配置器

插入字符

也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。
s.insert(0,”my name”);
s.insert(1,str);
这种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式。为了插入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:
insert(size_type index, size_type num, chart c)和insert(iterator pos, size_type num, chart c)。
其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:
insert(0, 1, ‘j’);这时候第一个参数将转换成哪一个呢?
所以你必须这么写:insert((string::size_type)0, 1, ‘j’)!
第二种形式指出了使用迭代器安插字符的形式。

提取子串s.substr()

s.substr(); // 返回s的全部内容
s.substr(); // 从索引11往后的子串
s.substr(,); // 从索引5开始6个字符

string到int的转换

int n=;
str1="";
stringstream stream;
stream<<str1;
stream>>n;
cout<<n<<endl;

参考 :

https://blog.csdn.net/manonghouyiming/article/details/79827040

C++ string 详细用法的更多相关文章

  1. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  2. CString.Format的详细用法(转)

    CString.Format的详细用法(转) 在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CS ...

  3. 【转】java.util.vector中的vector的详细用法

    [转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...

  4. C#中string.Format 用法详解

    这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string. ...

  5. C#Windows窗体中添加了AxWindowsMediaPlayer的详细用法影响键盘操作的问题

    最近在写一个飞机大战游戏,但在为游戏背景添加声音的时候,发现添加了AxWindowsMediaPlayer的详细用法音乐控件不能再通过键盘控制飞机的移动了,在网上查了许久,没找到原因,差点就想去找老师 ...

  6. tstringlist详细用法

    TStringList 类是在Delphi使用最厂的一个对像,我们这里一起来看看 TStringList 的详细用法. 先把要讨论的几个属性列出来:1.CommaText2.Delimiter &am ...

  7. heckboxlist详细用法、checkboxlist用法、checkboxlist

    heckboxlist详细用法.checkboxlist用法.checkboxlist for (int i = 0; i < CheckBoxList1.Items.Count; i++) { ...

  8. Android开发中Context类的作用以及Context的详细用法

    Android中Context的作用以及Context的详细用法 本文我们一起来探讨一下关于Android中Context的作用以及Context的详细用法,这对我们学习Android的资源访问有很大 ...

  9. C# MediaPlayer的详细用法

    AxWindowsMediaPlayer的详细用法 作者:龙昊雪 AxWindowsMediaPlayer的详细用法收藏 function StorePage(){d=document;t=d.sel ...

随机推荐

  1. 对组件、Prop 和 State的研究-----------------引用

    组件 第一步是将 UI 分解成多个组件.例如,我们可以这样来拆分房子: 现在来编码! House:  <div>    <Roof />     // 房顶    <Wa ...

  2. JavaScript 输出的四种方法

    JavaScript 没有任何打印或者输出的函数. ㈠JavaScript 显示数据 ⑴使用 window.alert() 弹出警告框. ⑵使用 document.write() 方法将内容写到 HT ...

  3. LA 3263 好看的一笔画 欧拉几何+计算几何模板

    题意:训练指南260 #include <cstdio> #include <cstring> #include <algorithm> #include < ...

  4. ubuntu搭建、安装gitlab服务器以及初始化密码

    本为14.04 在搭建之前要确定其网络环境是没有问题.用root身份进行操作 1.安装和配置必要的依赖关系 apt-get update apt-get install -y curl openssh ...

  5. JavaWeb_(SSH论坛)_七、辅助模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 为避免代码冗余, ...

  6. Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果

    Unity中的粒子系统可以用于制作特效,如开枪火花效果,简单爆炸效果等.(毕竟程序员不是设计师,简单的特效都没有问题,要制作一些非常美观的特效还是需要多了解跟美术有关的知识.) 粒子系统实现一个简单的 ...

  7. [CSP-S模拟测试]:最小值(DP+乱搞)

    题目背景 $Maxtir$更喜欢序列的最小值. 题目传送门(内部题128) 输入格式 第一行输入一个正整数$n$和四个整数$A,B,C,D$. 第二行输入$n$个整数,第$i$个数表示$a_i$. 输 ...

  8. idea maven sync Cannot resolve xxx 的解决方案

    经常会出现这种奇葩情况,提示找不到包 其实是因为网络波动或者突然断掉,导致包更新出现问题 直接去maven的仓库目录 找到不能找到的包 删掉相关目录 然后重新更新maven就行了 比如 直接去仓库目录 ...

  9. docker —宝塔面板

    下载个单独的系统镜像 [root@git opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx-tomcat ...

  10. BuiltIn库

    简介 作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似ifelsewhile等内置关键字来实现各种逻辑功能(注1),而是提供给了用户BuiltIn库.如果用户想在测试用例中实现 ...