字符串专题

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;
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值