1.基本知识
字符串
//初始化,输入
string s;cin>>s;
getline(cin,s);//对于有空格的字符串
//运算
string s1="12",s2="34";
string s=s1+s2="1234";
//赋值
string str="" ;//空串
string str=" ";//空格
string s=str ;
string s="aaa";
string s(5,'1');//结果为"11111"
//常用函数
string s1="12345";
1.清空 s.clear()
2.长度 s.size();
3.非空 if(!s.empty()) //非空
4.删除 s.erase(x,y);//从x位置向后删除y个字符
s1.erase(0,2);//s1="345"
s.erase(s.begin()+1,s.end()-2);//删除某一段
s.erase(s.begin()+1,s.end()-1); //s1="15,删除下标(1~3);
5.插入 s.insert(pos,"");//在指定pos位置插入字符串
6.排序 sort(s.begin(),s.end());
7.查找 if(s1.find("1234")!=-1)//在s1里面能找到字符串1234
string s1="chccoocpc";
cout<<s1.find('c',2);//返回下标>=2的第一个字符'c'的下标为2
8.截取 string s1="123456";
string s2=s1.substr(1,4);//s2="2345",截取下标1~4这段长度
9.翻转 reverse(s.begin(),s.end());
对指定位置进行翻转
string::iterator it=s1.begin();
reverse(it,it+3);//s1="32145"
10.替换 s1.replace(0,2,'A');//s1="A345";
11.将其他变量类型转化为string字符串
double t=2.3333;
string s2=to_string(t);
12.将字符转化为小写 tolower(),大写 toupper()
13.将字符串转化为数字 stoi();
2.对多个字符串进行排序
https://ac.nowcoder.com/acm/problem/268974//例题链接
对字符串进行排序
vector<string>v;
void sortup(vector<string>&v)
{
sort(v.begin(),v.end());
}
bool cmp(const string &s1,const string &s2)
{
return s1.size()<s2.size();//repeat 重复
/*删掉重复元素
auto repeat=unique(v.begin(),v.end());
v.erase(repeat,v.end());
*/
}
sortup(v);//实现字典排序
up_sortup(v.begin(),v.end(),cmp);//在长度排序下,保持字典排序
3.将一个不规则字符串全部转变为大写/小写
string s,s1;
getline(cin,s);//读入一行
getline(cin,s1);
//大写
for(int i=0;i<s.size();i++)
{
if(s[i]>='a'&&s[i]<='z')
{
s[i]=s[i]-32;
}
}
for(int i=0;i<s1.size();i++)
{
s1[i]=toupper(s1[i]);//变成大写
}
//小写
for(int i=0;i<s.size();i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
s[i]=s[i]+32;
}
}
for(int i=0;i<s1.size();i++)
{
s1[i]=tolower(s1[i]);//变成大写
}
4.相关例题
P1308 [NOIP2011 普及组] 统计单词数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
1.将所给单词前后都加上空格,可构成字符串完全连在一起
2.利用b.find(a,0)==-1,没找到
3.利用while循环
int idx=b.find(a);
int t=idx;
int cnt=0;
while(t!=-1)//代表找到
{
cnt++;
t=b.find(a,t+1);
}
4.代码
#include<bits/stdc++.h>
#define endl '\n'
#define x first
#define y second
#define int long long
using namespace std;
typedef pair<int,int>PII;
const int N=1e6+10;
const int inf=0x3f3f3f3f;
void init()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
void solve()
{
init();
string a,b;
getline(cin,a);//读入一行
getline(cin,b);
//小写
for(int i=0; i<a.size(); i++)
a[i]=tolower(a[i]);
for(int i=0; i<b.size(); i++)
b[i]=tolower(b[i]);//变成大写
int cnt=0,i,j;
b=' '+b+' ';
a=' '+a+' ';
if(b.find(a)==-1)
cout<<-1<<endl;
else
{
int cnt=0;
int idx=b.find(a);
int t=idx;
while(t!=-1)
{
cnt++;
t=b.find(a,t+1);//上一个找的位置加1
}
cout<<cnt<<' '<<idx<<endl;
}
}
signed main()
{
int t=1;
while(t--)
{
solve();
}
return 0;
}