字符串(C++)

生成字符串

string str1;          //生成空字符串

string str2("123456789");         //生成“123456789”的复制品

string str5(5,'1');         //结果为str5="11111"  这里的第二个参数只能写一个字符

字符串插入

str.push_back('a');         //尾插一个字符,但这个不常用一般用下边这个

str+="a";

str.insert(s.begin()+i,'a');         //在字符串第i个下标处插入一个新字符a         第二个参数只能是一个字符

一般插入元素都用下边这个

str.insert(pos,"string");         //在指定的位置pos插入字符串;在下标为pos的位置处插入字符串

	string s1("123456789");
	//常用字符串插入1 
	s1+="hello";
	string s2=s1;
	//常用字符串插入2
	s1.insert(2,"a");
	cout<<s2<<endl<<s1<<endl;
	//123456789hello
	//12a3456789hello

字符串删除

一般都用这个:

string str1("123456789"); 

s1.erase(5,3);         //从第5个下标的位置(包括第5个下标处)开始,往后依次删除3个位置的值

	string s1("123456789");
	//s1.erase(s1.begin()+2);
	//删除下标为2的字符        结果为:12456789
	//s1.erase(1); 
	//删除下标为1,以及之后的所有值  结果为:1
	//s1.erase(s1.begin()+1,s1.end()-2);
	//结果为:189  //都是闭区间
	
	
	//最常用 
	s1.erase(5,3); 
	//从第二个位置开始 删除下标为5以及后边3个位置 
	//结果:123459  删除678  
	cout<<s1<<endl; 

转置字符串

reverse(s1.begin(),s1.end());

#include<bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

signed main(){
	string s1("123456789");
	reverse(s1.begin(),s1.end());
	cout<<s1;//987654321
	return 0;
}

字符串查找

string s("dog bird chicken bird cat");

//字符串查找------找到后返回首字母在字符串中的下标

1.查找一个字符串

if(s.find("chicken")!=-1)         //未查找到字符串的话,返回-1

cout<<s.find("chicken")<<endl;         //结果是:9

2.从下标为6开始找字符'i',返回找到的第一个i的下标

cout<<s.find('i',6)<<endl;         //结果是:11

字符串截取

string s1("0123456789");

string s1=s1.substr(2,5);         

//结果:23456  ------  参数2表示从下标为2的元素开始截取,参数5表示截取字符串的长度

tolower()         //把字符转化为小写

toupper()         //把字符转化为大写

字符串应用例题

[NOIP2011 普及组] 统计单词数 - 洛谷

在字符串b中统计单词a的个数

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

signed main(){
	string a,b;
//	cin>>a;//读到空格时自动认为是字符串结束标志'\0' 
    getline(cin,a);
    getline(cin,b);
	
    //将字符串a,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]);
	}
	
    //这样保证在字符串中查找的是一个单词,而不是单词的一部分
	a=' '+a+' ';
	b=' '+b+' ';
	
	if(b.find(a)==-1){
		cout<<-1<<endl;
	}
	else{
    //查找到一个之后,接下来  从查找到之后的下标  开始接着查找并计数
	    int count=0;
	    int tem=b.find(a);
	    while(tem!=-1){
	    	tem=b.find(a,tem+1);
			count++;
		}
		cout<<count<<' '<<b.find(a)<<endl;
	}

	return 0;
}

登录—专业IT笔试面试备考平台_牛客网

查找1-n中所有数字各个位数含有多少个x

#include<bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;
const int N=2e5+10,M=1e3+10;

int n,x;
int t=0;

signed main()
{
	cin>>n>>x;
	for(int i=1;i<=n;i++)
	{
		string s=to_string(i);
		//依次将数字以字符串的形式存储,方便取出数字的每一位数 
		for(int j=0;j<s.size();j++)
		{
			//依次取出每个数字的每一位数,并进行比较判断 
			if(s[j]-'0'==x)
			{
				t++;
			} 
		}
	}
	cout<<t<<endl;
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值