1.定义和初始化
使用头文件#include<string>
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s1;//默认初始化 一个空字符串
string s2=s1;// s2是s1的副本
string s3="hiya";//s3是该字符串字面值的副本
string s4(10,'c');//s4的内容是cccccccccc
return 0;
}
2.读入与输出
特别简单 直接读入和输出就好
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s1,s2;
cin>>s1>>s2;
cout<<s1<<' '<<s2<<endl;
return 0;
}
不能用printf 和scanf直接输入和输出 string 是 一个stl
如果要用printf输出 需要用到string字符串的头指针 也就是 c_str()
如果要直接读入一整行 输出包含空格 则用getline
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s1,s2;
getline(cin,s1);
cout<<s1<<' '<<s2<<endl;
return 0;
}
3.string的empty和size操作
注意size是无符号整数,因此s.size()<=-1一定成立
同时s.size()的时间复杂度为O(1)
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s1,s2 = "abc";
cout<<s1.empty()<<endl;
cout<<s2.empty()<<endl;
cout<<s2.size()<<endl;
return 0;
}
输出如下
4.string 的比较
支持< > >= <= == !=等所有比较操作,按字典序进行比较
非常方便 类似变量的操作
5.为string对象赋值
类似变量赋值 可以直接s1=s2;
把s2的值赋给s1;
6.俩个string对象相加
这就是远胜于字符数组的便利操作了 直接类似变量的相加就能让字符串相连接
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s1="hello,",s2 = "word!";
cout<<s1+s2<<endl;
return 0;
}
你甚至可以直接加字符串和字符 非常神奇
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s1="hello,",s2 = "word!";
cout<<s1+"word"+'!'<<endl;
return 0;
}
7.常见错误
8.string的操作
1.类似C 用字符数组的方式操作
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s="hello";
for(int i=0;i<s.size();i++)
cout<<s[i]<<endl;
return 0;
}
2.用C++特有的方式
# include <iostream>
# include <string>
using namespace std;
int main()
{
string s = "hello";
for (char c : s)//char为返回类型
cout << c << endl;
return 0;
}
如果想改变c的值 则加上&
for (char &c : s)
9.常用函数
1.insert
str.insert(i,s);//在原串下标为i的字符串str前插入字符串s
如此题
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s,sub;
while(cin >> s>>sub)
{
int idx=0;
for(int i=0;i<s.size();i++)
if(s[i] > s[idx])
{
idx= i;
}
s.insert(idx+1,sub);//str.insert(i,s);//在原串下标为i的字符串str前插入字符串s
cout<<s<<endl;
}
return 0;
}
2.find/rfind
查找函数运用如此题
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string A;
bool s=0;
while(getline(cin,A))
{
for(int i=0;i<A.size();i++)
{
if(A.find(A[i])==A.rfind(A[i]))
{
cout<<A[i]<<endl;
s=1;
break;
}
}
}
if(s==0)
cout<<"no"<<endl;
return 0;
}