c++string删除第⼀个字符_字符串操作的全⾯总结
字符串操作看似简单,其实⾮常重要,不注意的话,经常出现代码运⾏结果和⾃⼰想要的不⼀致,甚⾄崩溃。本⽂总结了⼀些构建string对象⽅法、修改string对象的⽅法、string类型的操作函数、string类型的查、string对象的⽐较。
1 构建string对象⽅法
⾸先,为了在我们的程序中使⽤string类型,我们必须包含头⽂件 。如下:
#include <string>
声明⼀个字符串变量很简单:
string Str;
这样我们就声明了⼀个字符串变量,但既然是⼀个类,就有构造函数和析构函数。上⾯的声明没有传⼊参数,所以就直接使⽤了string的默认的构造函数,这个函数所作的就是把Str初始化为⼀个空字符串。
String类的构造函数和析构函数如下:
String类函数说明string s;⽣成⼀个空字符串sstring s(s2);拷贝构造函数 ⽣成s2的复制品string s("value");⽤字符串value初始化String类函数说明
sstring s(b,e);以区间b,e内的字符作为字符串s的初值string s(cp,n);取字符数组,前n个字符作初值string s(s2,pos2);将字符串s2"始于位置pos2"部分当作字符串的初值string s(s2,pos1,len);将字符串s2内"始于pos1且长度最多len"的部分作为字符串的初值s.~string();销毁所有字符,释放内存
代码实例:
代码实例
#include <iostream>
#include <string>
using namespace std;
//20200527  测试字符串操作  C语⾔与CPP编程
int main()
{
string s1;c++string类型
cout <<s1 << endl;  //没有赋值输出为空
string s2(10,'f');
cout <<s2 << endl;  //⽤10个f定义字符串s2,输出ffffffffff
string s3(s2);
cout <<s3 << endl;  //⽤s2定义上,将s3拷贝给s2,s2和s3是不同的字符串,
//只是构造的时候拷贝s2,修改其中⼀个不会影响另⼀个,s3输出位ffffffffff
string s4(s3.begin(),s3.begin()+(s3.size())/2); //定义s4⽤迭代器做参数,从第⼀个迭代器s3.begin()  cout <<s4 << endl;    //到第⼆个迭代器s3的⼀半即s3.size()/2结束,s3有10个f,s4输出为fffff
char *cp = "Hello";            //最后有空字符/0
char c_array[] = "world";  //最后有空字符/0
char no_null[] = {'H','e','l','l','0'};    //最后没有空字符/0,不算C语⾔字符串,只是字符数组
string ss1(cp);
cout <<ss1 << endl;  //cp指向的字符串⼀个⼀个拷贝到ss1对象⾥,ssl输出为Hello
string ss2(c_array,5);
cout <<ss2 << endl;  //c_array数组名就是指向第⼀个字符w的指针,从w开始取5个,ss2为world
string ss3(c_array+5,4);
cout <<ss3 << endl;  //c_array+5指向第五个字符d,再取4个字符,ss3为
//string ss4(no_null);//⽤字符数组为ss4赋值,因为不到/0,不知道拷贝⼏个会出错
string ss5(no_null,2); //这次取2个就知道什么时候结束,不会出错
cout <<ss5 << endl;    //ss5为He
s1 = "Hello";
cout << s1 << endl;  //s1输出Hello
string s6(s1,2);
cout << s6 << endl;  //⽤s1初始化s6,2表⽰字符下标,从第⼆个字符开始到最后,s6为llo
string s7(s1,0,2);
cout << s7 << endl;  //从s10开始取2个,s7为He
string s8(s1,0,8);
cout << s8 << endl;  //从s1的第⼀个开始取8个,不够8个就结束,s8为Hello
return 0;
}
** 运⾏结果**:
2 修改string对象的⽅法
与容器共有的 string 操作
与容器共有的 string 操作:
与容器共有的 string 操作⽅法说明
与容器共有的 string 操作⽅法说明s.insert(p,t);在迭代器 p 指向的元素之前插⼊⼀个值为 t 的新元素,返回指向新插⼊元素的迭代器
s.insert(p,n,t);在迭代器 p 指向的元素之前插⼊ n 个值为 t 的新元素s.insert(p,b,e);在迭代器 p 指向的元素之前插⼊迭代器 b 和 e 标记范围内所有的元素。返回 voids.assign(b,e);在迭代器 b 和 e 标记范围内的元素替换 s。string类型,返回 s;容器类型返回
voids.assign(n,t);⽤值为 t 的 n 个副本替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 ase(p);删除迭代器 p 指向的元素。返回⼀个迭代器,指向被 删除元素后⾯的元素s.erase(b,e);删除迭代器 b 和 e 标记范围内所有的元素。返回⼀个迭代器,指向被删除元素段后⾯的第⼀个元素
代码实例
代码实例:
#include <iostream>
#include <string>
using namespace std;
//2020.05.27 测试字符串操作:C语⾔与CPP编程
int main()
{
string s("hello");
string s2("abcdef");
string::iterator  p =  s.begin();  //迭代器p
s.insert(p,'A');  //在迭代器p指向的s开始之前插⼊A
cout << s << endl;  //s为Ahello
s.insert(p,3,'B');  //p指向返回的Ahello的A处,在A之前插⼊3个B
cout << s << endl;  //s为BBBAhello
string::iterator  b =  s2.begin();  //迭代器b
string::iterator  e =  s2.end();  //迭代器e
//p = s.begin();      //p指向s
s.insert(p,b,e);    //在p指向的s之前插⼊b和e迭代器范围内的元素abcdef  cout << s << endl;  //s为abcdefBBBAhello
s = "hello";
cout << s << endl;  //s为hello
s.assign(b,e);      //s所有的元素倍替换为b到e之间的元素,b与e之间为s2  cout << s << endl;  //s为abcdef
s.assign(8,'K');
cout << s << endl;  //s为KKKKKKKK
p = s2.begin();    //迭代器p指向s2的a
cout << s2 << endl;  //s2为bcdef
p = s2.begin();    //a被删除,p指向b
p++;                //指向c
p++;                //指向d
string::iterator p2 = s2.end(); //p2迭代器指向f
p2--;                            //指向e
cout << s2 << endl;              //s2为bcf
return 0;
}
运⾏结果:
运⾏结果
string 类型特有的版本:
string 类型特有的版本
string以数组的形式存储,可以⽤数组的下标进⾏修改操作:
string 修改操作⽅法说明s.insert(pos,n,c);在下标 pos 的元素之前插⼊ n 个字符 cs.insert(pos,s2);在下标 pos 的元素之前插⼊
string 修改操作⽅法说明
string 对象 s2s.insert(pos,s2,pos2,len);在下标为 pos 的元素之前插⼊ s2 中从下标 pos2 开始的 len 个字符s.insert(pos,cp,len);在下标为 pos 打元素之前插⼊ cp 所指向数组的前len 个字符s.insert(pos,cp);在下标为 pos 的元素之前插⼊ cp 所指向的以空字符结束的字符串副本s.assign(s2);⽤ s2 的副本替换 ss.assign(s2,pos2,len);⽤ s2 中从下标 pos2 开始的 len 个字符替换 ss.assign(cp,len);⽤ cp
所指向数组的前 len 个字符副本替换 ss.assign(cp);⽤ cp 所指向的以空字符结束的字符串替换 ss.erase(pos,len);删除从下标 pos 开始的len 个字符
代码实例:
代码实例
#include <iostream>
#include <string>
using namespace std;
//2020.05。27 测试字符串操作:C语⾔与CPP编程
int main()
{
string s("hello");
string s2("abc");
s.insert(0,3,'A');  //在s下标是0之前插⼊3个A
cout << s << endl;  //s为AAAhello
s.insert(5,s2);      //在AAAhello下标是5的元素之前插⼊abc
cout << s << endl;  //s为AAAheabcllo
s2 = "123456";
s.insert(0,s2,2,3);  //在s的下标是0之前插⼊s2下标为2开始往后的3个元素345
cout << s << endl;  //s为345AAAheabcllo
char *cp = "Stately plup Buck";
s.assign (cp,7);
cout << s << endl;  //s为Stately
s.assign(cp);        //没有长度,默认是拷贝全部
cout << s << endl;  //s为Stately plup Buck
s = "hello";
s.insert (0,cp,7);
cout << s <<endl;  //s为Statelyhello
s.insert(0,cp);
cout << s <<endl;  //s为Statelyhello
s = "hello";
s2 = "abcdef";
s.assign(s2,2,3);    //s2中下标为2开始3个元素赋值给s;
cout << s <<endl;  //s为cde
s.assign(s2);
cout << s <<endl;  //s为abcdef
cout << s <<endl;  //s为abf
s = "123456789";
cout << s <<endl;  //s为1234
s.insert(s.size(),5,'!'); //在s下标为s.size()处,插⼊5个!
cout << s <<endl;  //s为1234
s = "abc";

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。