洛谷字符串(板刷)---入门2

洛谷B2113,B2114,B2116 

B2113

题目:

模拟,给定一个字符串,求出相邻两个字符相加得到的新字符


收获:

字符串字符运算 ,若不进行强制转换,则会直接输出字符之间ascll码相加减等运算 ,即得到的结果是ascll的加减法的结果
当你执行 cout << (s[i] + s[i+1])时; 如果 s[i] 是 '1',s[i+1] 是 '2',那么实际上输出的是 ASCII 码 49 + 50,即 99.

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    getline(cin,s);
    for(int i=0;i<s.length();i++){
    	if(i!=s.length()-1){
    		cout<<(char)(s[i]+s[i+1]);
    		continue;
		}
		cout<<char(s[i]+s[0]);
	}
	return 0;
}//输入1234,输出cege


//而不进行强制转换

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    getline(cin,s);
    for(int i=0;i<s.length();i++){
    	if(i!=s.length()-1){
    		cout<<(s[i]+s[i+1]);
    		continue;
		}
		cout<<(s[i]+s[0]);
	}
	return 0;
}//输入1234,输出99101103101,99就是c的ascll码,其它亦是如此

B2114

题目:

模拟,求出AGCT所匹配的字符

收获:

cout字符串的名字就能打印字符串,无需遍历字符串进行打印,cout<<s 


易错:


不能用if,表选择关系要用else if,否则会执行多次    

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    getline(cin,s);
    for(int i=0;i<s.length();i++){
    	if(s[i]=='A'){
    		s[i]='T';
		}
		else if(s[i]=='T'){
    		s[i]='A';
		}
		else if(s[i]=='G'){
    		s[i]='C';
		}
		else if(s[i]=='C'){
    		s[i]='G';
		}
	} 
	cout<<s;
	return 0;
}

B2116

题目:

给出一个字符串,求出1.字符的大小写互换,2.字符逆序输出,3.字符循环平移

收获:


STL常用函数:s.length()表示字符串长度/isupper(s[i]) or islower(s[i])判断是大写还是小写
tolower(s[i]) or toupper(s[i])将字符串中字母强制转为小写或大写/reverse(s.begin(),s.end()),右边区间为开区间 

易错:

原文与密码顺序弄反了

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
	cin>>s;
	int l=s.length();//l表示字符串长度 
	for(int i=0;i<l;i++){
		if(isupper(s[i]))s[i]=tolower(s[i]);
		else if(islower(s[i]))s[i]=toupper(s[i]);
	} 
	reverse(s.begin(),s.end());//将字符串翻转 
	for(int i=0;i<l;i++){
		switch(s[i]){
			case 'x':cout<<'a';break;
			case 'y':cout<<'b';break;
			case 'z':cout<<'c';break;
			case 'X':cout<<'A';break;
			case 'Y':cout<<'B';break;
			case 'Z':cout<<'C';break;
			default:cout<<char(s[i]+3);break;
		}//采用特判进行循环右移 
	} 
	return 0;
}

//摘抄
//若不用特判来表示循环右移
char Shift(char c){
  if(c>='A'&&c<='Z')return ((c-'A'+3)+26)%26+'A';
  else return ((c-'a'+3)+26)%26+'a';
}//何为循环右移,a~z字母轮完再回到a,大写亦如此 ,最基本的写法√√√要求掌握

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满月居于月空、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值