string (外挂般的存在)

2024-04-23 21:08
文章标签 string 存在 外挂 般的

本文主要是介绍string (外挂般的存在),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 STL中的string 功能很强大,比字符数组强到不是一丁半点,接下来看看他的用法:

string 的定义 substr操作 insert操作 erase操作 append和replace操作   assign操作 string搜索操作(find 和 rfind)  find_….of函数 

代码:

 

#include<bits/stdc++.h>
using namespace std;
int main()
{string s,t;		//s=("china");//s="china";//s=t; //string s("chian")s="12345";			//1 2 3 4 5t=s;cout<<t<<endl;      //1 2 3 4 5cout<<"......"<<endl;string p=s.substr(0,3);		 //指定从a 开始后面 b个字符的串 		cout<<p<<endl;				//1 2 3cout<<"......"<<endl;p=s.substr(3);     			//也可以从a 处到最后的串	cout<<p<<endl; 	//4 5		可以是一个参数,也可以是两个参数 cout<<"......"<<endl;// 只能初始化的形式 实现 string s1(s,2);		//string 是第几个字符后面的字符的串到s1  cout<<s1<<endl;		//3 4 5cout<<"......"<<endl;char cs[]="12345";        string s2(cs,2);	//char 字符数组 是*前几个字符*的串复制到 s2中  cout<<s2<<endl;      //1 2cout<<"......"<<endl;string s3="app";	//string 的插入操作				s.insert(2,s3);	   			//12app345在*前几位*指定位置处插入另一个字符串	//s.insert(2,"app",2);		//也可以是三个参数,最后一个是字符串前几位赋值到s	cout<<s<<endl;	 			//可以有两个参数 //s.insert(2,s3,0,3);       //也可以是4个参数 就是要插入字符串的a到b范围 //cout<<s<<endl; cout<<"......"<<endl;//string 的删除操作 比字符数组 更加灵活,在一些字符串问题中,起到的作用更大 s.erase(0,1); //2app345 就是删掉第一位字符 从a位置开始 删除几个字符 //s+=t[0]; cout<<s<<endl;cout<<"....."<<endl; s.erase(s.begin());  //用迭代器 删除指定位置的字符 cout<<s<<endl;       //app345 cout<<"....."<<endl;//s.erase(s.begin(),s.end());  // 全部删除 //cout<<s<<endl;//cout<<"....."<<endl;//string的搜索操作可以来搜索 一个*字符串* 在一个大字符串里面 是否出现过 size_t found=s.find("app");            // size_t 定义 if(found!=string::npos)  // 固定的格式 string:: nposcout<<"位置"<<' '<<found<<' '<<"find it"<<endl;   //如果没有找到,就是返回结尾//如果找到,那么返回字符串出现的位置 cout<<"......."<<endl;string s5;s5="aaa aa a a aa aaa  bbb aa";found=s5.find("aa");while(found!=string::npos){cout<<found<<' ';found=s5.find("aa",found+1);   //这个参数可以是1 2 3个 }//1个参数就是 找第一个出现的位置,2个参数就是在哪个 起点开始找,3个参数是找的内个字符串 的前几位								cout<<endl; cout<<"......."<<endl;//string 的 rfind 找最后一个出现的匹配字符串,返回的位置仍然是从前往后数的。string s8="the apple is good good good";size_t found2=s8.rfind("good");if(found2!=string ::npos){cout<<"位置"<<' '<<found2<<' '<<"find it"<<endl;}cout<<"......."<<endl;//append 是追加字符串和字符的,replace是替换操作 s.append("999");    //qpp345999 //s+="999";	 	   //效果一样 cout<<s<<endl;cout<<"........."<<endl;s.replace(1,2,"china");   //achina345999 可以有3个参数,1是要替换的其实位置 //也开始是4个参数和5个参数									cout<<s<<endl;cout<<"......."<<endl;s.replace(1,5,"japana",0,5);//ajapan345999 多了两个参数 就是要插入的字符串的开始位置,和要插入几个字符 cout<<s<<endl;cout<<"........."<<endl;s.replace(1,5,"apple",5); 	//aapple345999  就是将 要插入字符串的前几位插入 cout<<s<<endl;cout<<"........."<<endl;s.replace(1,5,3,'!'); //a!!!345999  后面两个参数是变成几个那个字符   cout<<s<<endl;cout<<"........."<<endl;//迭代器 来实现 替换操作 s.replace(s.begin(),s.begin()+2,"oooo");cout<<s<<endl;   //oooo!!345999cout<<"........."<<endl;//string  的 assign 操作  灵活赋值string s7=s.assign(s);  //可以进行赋值字符串 s7.assign(s,0,4);     //oooo 需要3个参数,需要插入的字符串,开始位置和几个字符 //s7.assign(s.begin(),s.begin()+4);    //可以使用迭代器来做 cout<<s7<<endl;cout<<"........."<<endl;//  string的比较可以直接 > < = 来比较 //find...of 函数 // find_first_of(str) 找到str 字符串内每个字符出现的位置并且对该字符进行操作 	size_t found3=s.find_first_of("!345");while(found3!=string::npos){s[found3]='#';      //进行操作 found3=s.find_first_of("!345",found3+1);  //再去下一位找	}cout<<s<<endl;   //oooo#####999cout<<"......."<<endl;//find_first_not_of(str) 找到第一个不在 str 内的字符 size_t found4=s.find_first_not_of("9");while(found4!=string::npos){s[found4]='9';found4=s.find_first_not_of("9",found4+1);}cout<<s<<endl;  // 999999999999cout<<"......"<<endl;//find_last_of(str)     找到 str 中任意一个字符最后 出现的位置 //find_last_not_of(str) 找到最后一个不存在 在str串中的字符 return 0;
}

来看两道题 ,你肯定会喜欢上 string 的:

链接:https://ac.nowcoder.com/acm/problem/21179
来源:牛客网
 

题目描述

Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法。

魔法可以选择字符串的任一位置,并将该位置后面的所有字符水平拼接到串首。

例如:对于字符串abcde,可以通过施加魔法得到cdeab。

如果xxx通过施加魔法将字符串的字典序变得严格比之前的小,那么他将拿走这一字符串。

Rabbit想知道自己的字符串会不会被xxx拿走。

输入描述:

第一行一个整数n,表示字符串的长度。接下来一行一个长度为n的只由小写字母组成的字符串。

输出描述:

如果Rabbit的字符串会被xxx拿走,输出“YES”。
否则输出“NO”。
(不输出引号)

示例1

输入

复制

5
cdeab

输出

复制

YES

说明

xxx可以把e之后的部分“ab”放到串首,得到abcde,字典序比cdeab小,故将拿走字符串。

示例2

输入

复制

5
abcde

输出

复制

NO

备注:

1≤n≤100000

就是把后面的部分字符串放到字符串首,如果是严格的,并且比初识的串字典序小,那就输出YES,否则就输出NO。

说说思路吧:一开始理解错误思路,我想的是只要有比首字符ASCLL小的,就是NO,但是如果是abadcg 我就是输出NO,应该是YES。于是,大神代码,用了灵活操作的 string 来做这道题。就是每次把第一位字符已到最后一位,然后比较此时字符串与初始字符串字典序哪个大。如果不满足,就继续移动,直到字典序小为止。相对于字符数组,删除移动操作比较麻烦,但是 string是很简单的,大家可以遇见这种问题,可以首先考虑 string  的用法,相对于简单。

 

#include <bits/stdc++.h>
using namespace std;
int main()
{string s, t;scanf("%*d");cin >> s;t = s;for (int i = 1; i < t.size(); i++){t += t[0];t.erase(0,1);if (t < s){puts("YES");return 0;}}puts("NO");
}

2.看题

链接:https://ac.nowcoder.com/acm/contest/333/I
来源:牛客网
 

题目描述

最近Jhadgre拿到了一个系列表情包,他很高兴,于是他给每个关系好的女性好友都送了一盒饼干外带这一套表情包。

 

结果让他惊呆了,竟然真的有女孩子答应他........再来一盒(不然你以为?)

当然也有人回复一些其他的消息...唯独没有答应做他女朋友的人。

Jhadgre很伤心,但是作为一个有原则的人,既然答应了送别人小饼干,那就必须要给!

所有人的回复都由大写字母,小写字母与','组成,占一行,Jhadgre认为只要其中包含了连续的10个小写字母"zailaiyihe"就意味着这个人想要再来一盒。

现在Jhadgre准备给每一个想要“再来一盒”的人买一盒小饼干,他想知道总共需要买几盒小饼干?

输入描述:

第一行一个整数N,表示有N个人回复(1<=N<=1000)
接下去N行每行都是一个人的回复,由大写字母,小写字母与','组成。
(数据保证每行字符不超过1000个)

输出描述:

一个整数表示Jhadgre需要买几盒小饼干

示例1

输入

复制

3
Bu,xing
wokeyizailaiyihe
no

输出

复制

1

刚拿道题,完全没有思路,难道是KMP算法,大一没有开数据结构,怎么办,还是看看大神的代码学习一下:

一看这么短的代码,还带上“水题”的标签,哎,我太菜了。

就是用了string 的一个搜索str.find() 函数,就可以AC掉。那个格式string::npos 是一定的。

代码:

#include<bits/stdc++.h>
#include<stdio.h>
#include<iostream>
using namespace std;
#include<string.h>
const int maxn=1005;
typedef long long ll;
int main()
{int n;int k=0;cin>>n;while(n--){string a;cin>>a;if(a.find("zailaiyihe")!=string::npos){k++;}}cout<<k<<endl;   return 0;
}

https://blog.csdn.net/tengfei461807914/article/details/52203202   推荐看看详解。

https://blog.csdn.net/fioletfly/article/details/53941954

 

这篇关于string (外挂般的存在)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929889

相关文章

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

hdu2072(string的应用)

单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25447    Accepted Submission(s): 5957 Problem Description lily的好朋友xiaoou333最近很空,他

【UVA】10739 - String to Palindrome(动态规划)

比较水的动态规划 dp[i][j] 将原串 i ~ j 之内的字符转化为回文字符所需要的最小操作次数 其中删除操作和添加操作本质上是一样的。 三个状态转移方程: dp[i][j] = min(dp[i][j] ,dp[i + 1][j]); dp[i][j] = min(dp[i][j] ,dp[i + 1][j - 1]); dp[i][j] = min(dp[i][j] ,dp[

理解String的compareTo()方法返回值

compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序), 如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值。 如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符作比较, 以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度。 我们可以通过阅读源码加深对compareTo()的理解: comp

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

leetcode#541. Reverse String II

题目 Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of

Java中Map取值转String Null值处理

Map<String, Object> 直接取值转String String value = (String)map.get("key") 当map.get(“key”)为Null值时会报错。 使用String类的valueOf静态方法可以解决这个问题 String value = String.valueOf(map.get("key"))

LeetCode题练习与总结:存在重复元素Ⅱ--219

一、题目描述 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,1], k = 3输出:true 示例 2: 输入:nums = [1,0,1,1], k