目录
前言:
C语言: C++:
头文件:#include<cstring> 头文件:#include<string>
定义字符串:char c[100]; 定义字符串:string s;
获取带空格的输入:cin.getline(c,100); 获取带空格的输入:getline(cin,s);
求字符串的长度:strlen(); 求字符串的长度:s.size();
1、P5733 【深基6.例1】自动修正
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
cin>>a;//getline(cin,s);
for(int i=0;i<a.size();i++){
if(a[i]>='a'&&a[i]<='z'){
a[i]-=32;//a[i]=a[i]-'a'+'A';
}
}
cout<<a;
return 0;
}
2、P1914 小书童——凯撒密码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,s[20000];
cin>>a;
char b[20000];
cin>>b;
for(int i=0;i<strlen(b);i++){
s[i]=b[i];
}
for(int i=0;i<strlen(b);i++){
s[i]=s[i]+a;
if(s[i]>'z'){
s[i]='a'+(s[i]%'z')-1;//当s[i]=z+1时,应该返回a。
}
}
for(int i=0;i<strlen(b);i++){
b[i]=s[i];
cout<<b[i];
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
string s;
cin>>n>>s;
for(int i=0;i<s.length();i++){
s[i]=(s[i]-'a'+n)%26+'a';
//s[i]-'a'字母表的相对位置
}
cout<<s;
return 0;
}
3、P1125 [NOIP2008 提高组] 笨小猴
#include<bits/stdc++.h>
using namespace std;
bool f(int q){
if(q<2){
return false;
}
for(int i=2;i<sqrt(q);i++){
if(q%i==0){
return false;
}
}
return true;
}//判断max-min是否是质数
int main(){
char a[102],b[30];
int c[30],d[30];
cin>>a;
for(int i=0;i<26;i++){
int ans=0;//循环一遍ans清零
b[i]='a'+i;//将26个字母存进b[i]
for(int j=0;j<strlen(a);j++){
if(a[j]==b[i]){
ans++;
}
}
c[i]=ans;//将26个字母出现的次数存进c[i]
}
sort(c,c+26);
int max=c[25];
int min=c[25];
for(int i=0;i<26;i++){
if(c[i]!=0&&c[i]<min){
min=c[i];//找到除了0以外最小的数
}
}
//cout<<max<<" "<<min<<endl;
int q=max-min;
f(q);
if(f(q)){
cout<<"Lucky Word"<<endl;
cout<<q;
}else{
cout<<"No Answer"<<endl;
cout<<0;
}
return 0;
}
4、P1957 口算练习题
#include<bits/stdc++.h>
using namespace std;
int n,x,a,b;
string q;
char l_c;
int len(int num){
int x=0;
if(num==0){
return 1;
}else if(num>0){
while(num){
num/=10;
x++;
}
return x;
}else{
x=1;
num=-num;
while(num){
num/=10;
x++;
}
return x;
}
}//读取num的长度
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>q;
switch(q[0]){
case'a':
cin>>a>>b;
printf("%d+%d=%d\n",a,b,a+b);
x=len(a+b)+2;
l_c=q[0];
break;
case'b':
cin>>a>>b;
printf("%d-%d=%d\n",a,b,a-b);
x=len(a-b)+2;
l_c=q[0];
break;
case'c':
cin>>a>>b;
printf("%d*%d=%d\n",a,b,a*b);
x=len(a*b)+2;
l_c=q[0];
break;
default:
cin>>b;
a=0;
int l=q.size();
for(int i=0;i<l;i++){
a=a*10+q[i]-'0';
}
switch(l_c){
case'a':
printf("%d+%d=%d\n",a,b,a+b);
x=len(a+b)+2;
break;
case'b':
printf("%d-%d=%d\n",a,b,a-b);
x=len(a-b)+2;
break;
case'c':
printf("%d*%d=%d\n",a,b,a*b);
x=len(a*b)+2;
break;
default:
break;
}
break;
}
x=len(a)+len(b)+x;
printf("%d\n",x);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
string s;
char opt;
int lena(int x){
int len=0;
if(!x) return 1;
if(x<0)len++;
while(x){
len++;
x/=10;
}
return len;
}
int main(){
cin>>n;
while(n--){
cin>>s;
if(s[0]=='a'||s[0]=='b'||s[0]=='c'){
cin>>a;
opt=s[0];
}else{
a=0;
for(int i=0;i<s.length();i++){
a=a*10+(s[i]-'0');//字符转成int
}
}
cin>>b;
if(opt=='a'){
cout<<a<<"+"<<b<<"="<<a+b<<endl;
cout<<lena(a)+lena(b)+lena(a+b)+2<<endl;
}
if(opt=='b'){
cout<<a<<"-"<<b<<"="<<a-b<<endl;
cout<<lena(a)+lena(b)+lena(a+b)+2<<endl;
}
if(opt=='c'){
cout<<a<<"*"<<b<<"="<<a*b<<endl;
cout<<lena(a)+lena(b)+lena(a+b)+2<<endl;
}
}
return 0;
}
5、P5015 [NOIP2018 普及组] 标题统计
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int l;
getline(cin,s);
l=s.size();
int ans=l;
for(int i=0;i<l;i++){
if(s[i]==' '){
ans--;
}
}
cout<<ans<<endl;
return 0;
}
6、P5734 【深基6.例6】文字处理软件
#include<bits/stdc++.h>
using namespace std;
int n,a;
string qwq;
string c1;
string b1;
int b,c;
int main()
{
cin>>n;
cin>>qwq;
for(int i=0;i<n;i++)
{
cin>>a;
if(a==1)
{
cin>>b1;
qwq+=b1;
cout<<qwq<<endl;
}
else if(a==2)
{
cin>>b>>c;
c1=qwq.substr(b,c);
qwq=c1;
cout<<qwq;
cout<<endl;
}
else if(a==3)
{
cin>>b>>b1;
qwq.insert(b,b1);
cout<<qwq<<endl;
}
else if(a==4)
{
cin>>b1;
if(qwq.find(b1)<qwq.size())
cout<<qwq.find(b1)<<endl;
else
cout<<-1<<endl;
}
}
return 0;
}
注:
在C++中,find()
函数是 std::string
类和 std::vector
类等容器类的一个成员函数,用于在容器中查找特定的元素或子字符串。根据上下文,find()
函数的行为可能会有所不同。
对于 std::string
std::string
类的 find()
函数用于查找子字符串在主字符串中第一次出现的位置。如果找到,它返回子字符串的索引;如果没有找到,它返回 std::string::npos
,这是一个表示无效位置的静态成员常量。
7、P1308 [NOIP2011 普及组] 统计单词数
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int main(){
getline(cin,s1);
getline(cin,s2);//带空格读入字符串
//避免大小写,将字符串s1,s2转为小写a-97,A-65
for(int i=0;i<s1.length();i++){
if(s1[i]>='A'&&s1[i]<='Z'){
s1[i]+=32;
}
}
for(int i=0;i<s2.length();i++){
if(s2[i]>='A'&&s2[i]<='Z'){
s2[i]+=32;
}
}
s1=' '+s1+' ';//特殊问题一般化
s2=' '+s2+' ';
int pos,first,cnt=0;
pos=first=s2.find(s1);
if(pos==string::npos) cout<<-1;//没找到
else{
while(pos!=string::npos){
cnt++;
pos=s2.find(s1,pos+1);
pos=s2.find()
}
cout<<cnt<<" "<<first;
}
return 0;
}
8、P3741 小果的键盘
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,ans=0;
string s;
cin>>n>>s;
if(n<=1){
cout<<0<<endl;
}else{
for(int i=0;i<n;i++){
if(s[i]=='V'&&s[i+1]=='K'){
ans+=1;
s[i]='1';
s[i+1]='1';//标记,避免重复计算
}
}
for(int i=0;i<n;i++){
if((s[i]=='V'&&s[i+1]=='V')||(s[i]=='K'&&s[i+1]=='K')){
ans+=1;
break;//最多只能改一次
}
}
cout<<ans<<endl;
}
return 0;
}
9、P1321 单词覆盖还原
#include<bits/stdc++.h>
using namespace std;
int main(){
int a=0,b=0;
string s;
cin>>s;
for(int i=0;i<s.length();i++){
if(s[i]=='b'||s[i+1]=='o'||s[i+2]=='y'){
a++;
}
if(s[i]=='g'||s[i+1]=='i'||s[i+2]=='r'||s[i+3]=='l'){
b++;
}
}
cout<<a<<endl<<b;
return 0;
}