目录
一、什么是字符串?
二、如何定义字符串?
三、我们为什么要用字符串?
四、字符串的运用!
题目一:
答案一:
题目二:
答案二:
题目三:
答案三:
四、结语!
五、下期你们想听什么?
字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s="abcdefghij",则s[1]="b",s[9]="j",这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。
在C++中,我们会使用string来定义字符串,且string只出现在C++中(C这个系列),为了使用string,我们还需要使用一个头文件——cstring,当然用万能头也可以。
字符串的存储方式依然是以数组形式,主要是为了方便编程人员。如果"adfsdfdsfsdfsdfsdfsdfsdfsdfdsfsdfddfdsfdf"这么长的字符串让你手工存入数组,你可愿意?
有个N个字母(A~Z)连成一个字符串X,你需要在N个字母中寻找到一个独特的连续长度为K的字符串P,使得这个任意连续长度为K的字符串P在字符串X中只出现一次。请问这个字符串P最短长度为多少。例如字符串X为ABCDABC,则满足要求的最短的字符串P的长度为4。也就是求字符串的最短不重复子串。长度为3的话ABC有重复,长度为2的话AB或者BC都有重复,长度为1的话A、B、C都有重复。输入格式:输入的第一行包含 N,第二行包含一个由 N 个字符组成的字符串,每个字符均在 A..Z 之内。
输出格式:输出一行,包含一个整数,为可以解决的问题的最小 K 值
限制:1≤N≤100
样例 1 :输入:
7
ABCDABC
输出:
4
#include
using namespace std;
int main() {int n; string s;set x;cin >> n; cin >> s;for(int len=1; len<=n; len++) {int flag=1;for(int i=0; i<=s.size()-len; i++) {if(x.count(s.substr(i,len))==1) {flag=0;break;} elsex.insert(s.substr(i,len));}if(flag==1) {cout << len;break;}}return 0;
}
输入一个正整数p,换行后再输入一个字符串,对字符串进行如下处理:
遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。
展开方式:p=1时,对于字母子串,填充小写字母;p=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“*”来填充。
如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de ”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出 时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。输入格式:第1行为一个正整数p。第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。
输出格式:只有一行,为展开后的字符串。
提示:字符串长度不超过100;1<=p<=3。
样例 1 :输入:
1
abcs-w1234-9s-4zz
输出:
abcstuvw123456789s-4zz
样例 2 :输入:
3
a-d-d
输出:
a**d-d
#include
using namespace std;
int p; string a;
int main()
{cin>>p; getchar(); int i; char j;cin>>a; int len=a.size();for(i=0;i0){if(a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9'&&a[i-1]='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z'&&a[i-1]='a'&&a[i-1]<='z')for(j=a[i-1]+1;j='0'&&a[i-1]<='9')for(j=a[i-1]+1;j
n名同学参加了c++期末考试,他们的成绩单如下,但是有的人成绩单分数错了,会出现多次分数,如果出现了多次分数,按照较高的一个。请按照分数从高到低排序,如果成绩相同,则按照名字的字典序从小到大进行排序。输入格式:第一行一个整数n(n<=200000)表示有n个人参加了考试,接下来n组数据,每组数据包含两行,第一行为学生姓名(只包含引文小写字母和空格,且不超过200个字符),第二行为这个学生得到的分数(int范围以内)。
输出格式:输出n行。排序之后的结果。
样例 1 :输入:
4
Aha World
99
Tom Wang
80
Ahaa
99
Tom Wang
100
输出:
Tom Wang
Aha World
Ahaa
#include
using namespace std;
struct node{int s;char name[205];
}a[200005],b[200005];
int n;
bool cmp(node x,node y){if(strcmp(x.name,y.name)==0){return x.s>y.s;} return strcmp(x.name,y.name)<0;
}
bool cmp1(node x,node y){if(x.s==y.s){return strcmp(x.name,y.name)<0;} return x.s>y.s;
}
int main()
{cin>>n;for(int i=1;i<=n;i++){gets(a[i].name);gets(a[i].name);scanf("%d",&a[i].s);}sort(a+1,a+n+1,cmp); int cnt=1;for(int i=1;i<=n;i++){if(strcmp(a[i].name,a[i-1].name)!=0)b[cnt++]=a[i];}sort(b+1,b+cnt+1,cmp1);for(int i=1;i
那么这期理论大家都听懂了吧,这期难度其实挺大的,代码敲了近一天,所以希望大家可以多三连,当然,关注我也是可以的!!!好的,那么这期就到此结束,下期理论些什么,由你们来决定,拜拜!!!