1.前言
哈喽,欢迎来到C++工作室。今天我们要向大家介绍一种STL容器——字符串
你心中的字符串可能是这样的:
char ch[60];
这个……呃……好吧,这个叫字符数组,这个和字符串的最大区别是这个有限量,字符串几乎没有上线。
而且,字符数组需要用for循环来读入
for(int i=1;i<=10;i++) cin >> ch[i];
而字符串的读入就很自然
string s;//定义字符串s
cin >> s;//读入
是不是简单了不少?
这时,肯定有杠精要说了:唉不带你这样玩的,我们可是有getchar的
getchar?你可别提了!那玩意你觉得能读取数组吗?
2.常用函数
字符串大小:
s.size()
字符串比大小:
C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。
在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,
比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)
同时,string (“aaaa”) <string(aaaaa)。
string A("aBcd");
string B("Abcd");
// "aBcd" 和 "Abcd"比较------ a > A
cout << A > B << endl; // 结果:1
上面的代码输出应该是1.
拼接string
string a="dianzan";
string b="guanzhu";
string c;
c=a+b;
cout << c;
上面的代码结果应该是dianzanguanzhu(点赞关注)
find函数
string a="dianzanguanzhu";
string b="guanzhu";
cout << a.find(b);
输出:8 (注意:如果找不到字串返回-1)
erase函数
string s1 = "123456789";
// s1.erase(s1.begin()+1); // 结果:13456789
// s1.erase(s1.begin()+1,s1.end()-2); // 结果:189
s1.erase(1,6); // 结果:189
string::iterator iter = s1.begin();
while( iter != s1.end() )
{
cout<<*iter;
*iter++;
}
cout<<endl;
substring函数:
void test()
{
string s1("0123456789");
string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度
cout<<s2<<endl;
}
sort函数:
void testa()
{
string s = "cdefba";
sort(s.begin(),s.end());
cout<<"s:"<<s<<endl; // 结果:abcdef
}
replace函数
void testb()
{
string s1("hello,world!");
cout<<s1.size()<<endl; // 结果:12
s1.replace(s1.size()-1,1,1,'.'); // 结果:hello,world.
// 这里的6表示下标 5表示长度
s1.replace(6,5,"girl"); // 结果:hello,girl.
// s1.begin(),s1.begin()+5 是左闭右开区间
s1.replace(s1.begin(),s1.begin()+5,"boy"); // 结果:boy,girl.
cout<<s1<<endl;
}
push_back函数 和 insert函数
void testc()
{
string s1;
// 尾插一个字符
s1.push_back('a');
s1.push_back('b');
s1.push_back('c');
cout<<"s1:"<<s1<<endl; // s1:abc
// insert(pos,char):在制定的位置pos前插入字符char
s1.insert(s1.begin(),'1');
cout<<"s1:"<<s1<<endl; // s1:1abc
}
下面是练习:
1.现在有n个字符串,要输出这n个字符串拼起来
输入样例: 样例输出
3 helloworld
hel
lo
world