Jzoj 字符串部分代码(共21题)

目录

Jzoj 字符串部分题目    传送门

1061: 【入门】茵茵的第一课  题目传送门

2008: 【入门】数字问题  题目传送门

1114: 【入门】数字和  题目传送门

1584: 【USACO】双数? 单数?  题目传送门

1650: 【入门】火柴棒等式(简版:)  题目传送门

2006: 【入门】删除指定字符  题目传送门

2100: 【入门】字符串中的空格移位  题目传送门

2004: 【入门】大小写转换  题目传送门

1071: 【基础】扫描识别  题目传送门

2010: 【入门】电报文字  题目传送门

2101: 【入门】字符串的反码  题目传送门

2007: 【入门】保留整数  题目传送门

2102: 【基础】删除字符串中间的*  题目传送门

2103: 【基础】字符串压缩  题目传送门

2104: 【基础】最长单词  题目传送门

2105: 【基础】字符串连接    题目传送门

2705: 【基础】猜数字II    题目传送门

2722: 【基础】动物简介     题目传送门

1049: 【入门】判断是否构成回文    题目传送门

1059: 【基础】隐藏的最大整数    题目传送门

每个单词比较

每一行比较

1075: 【基础】趣味填空    题目传送门


Jzoj 字符串部分题目    传送门

1061: 【入门】茵茵的第一课  题目传送门

#include <bits/stdc++.h>
using namespace std;
char asd[11];
int main()
{
	scanf("%s", asd);
	printf("%s", asd);
	return 0;
}

2008: 【入门】数字问题  题目传送门

#include <bits/stdc++.h>
using namespace std;
char asd[5];
int length;
int main()
{
	scanf("%s", &asd);
	length=strlen(asd);
	printf("%d\n", length);
	for(int i=0; i<length; ++i){
		printf("%c ", asd[i]);
	}
	printf("\n");
	for(int i=strlen(asd)-1; i>=0; --i){
		printf("%c", asd[i]);
	}
	return 0;
}

1114: 【入门】数字和  题目传送门

#include <bits/stdc++.h>
using namespace std;
char asd[200];
int length, ans;
int main()
{
	scanf("%s", &asd);
	length=strlen(asd);
	for(int i=0; i<length; ++i){
		ans+=asd[i]-'0';
	}
	printf("%d", ans);
	return 0;
}

1584: 【USACO】双数? 单数?  题目传送门

#include <bits/stdc++.h>
using namespace std;
int n, number;
char asd[61];
int main()
{
	scanf("%d", &n);
	for(int i=1; i<=n; ++i){
		scanf("%s", asd);
		number=asd[strlen(asd)-1]-'0';
		if(number%2){
			printf("odd\n");
		}
		else{
			printf("even\n");
		}
	}
	return 0;
}

1650: 【入门】火柴棒等式(简版:)  题目传送门

#include <bits/stdc++.h>
using namespace std;
int ans, l, a[10]={6,2,5,5,4,5,6,3,7,6};
char asd[260];
int main()
{
	scanf("%s", &asd);
	l=strlen(asd);
	for(int i=0; i<l; ++i){
		if(asd[i]=='+' || asd[i]=='='){
			ans+=2;
		
		}
		else if(asd[i]>='0' && asd[i]<='9'){
			ans+=a[asd[i]-'0'];	
		}
	}
	printf("%d", ans);
	return 0;
}

2006: 【入门】删除指定字符  题目传送门

#include <bits/stdc++.h>
using namespace std;
int l;
char asd[260], c;
int main()
{
	gets(asd);
	scanf("%c", &c);
	l=strlen(asd);
	for(int i=0; i<l; ++i){
		if(asd[i]!=c){
			printf("%c", asd[i]);
		}
	}
	return 0;
}

2100: 【入门】字符串中的空格移位  题目传送门

#include <bits/stdc++.h>
using namespace std;
int cnt, l;
char asd[260];
int main()
{
	gets(asd);
	l=strlen(asd);
	for(int i=0; i<l; ++i){
		if(asd[i]!=' '){
			printf("%c", asd[i]);
		}
		else{
			cnt++;
		}
	}
	while(cnt--){
		printf(" ");
	}
	return 0;
}

2004: 【入门】大小写转换  题目传送门

#include <bits/stdc++.h>
using namespace std;
int l;
char asd[80];
int main()
{
	gets(asd);
	l=strlen(asd);
	for(int i=0; i<l; ++i){
		if(asd[i]>='a' && asd[i]<='z'){
			printf("%c", asd[i]-32);
		}
		else if(asd[i]>='A' && asd[i]<='Z'){
			printf("%c", asd[i]+32);
		}
		else{
			printf("%c", asd[i]);
		}
	}
	return 0;
}

1071: 【基础】扫描识别  题目传送门

#include <bits/stdc++.h>
using namespace std;
char a[100];
int length;
int main()
{
	scanf("%s", &a);
	length=strlen(a);
	for(int i=0; i<length; ++i){
		if(a[i]=='O'){
			a[i]='0';
		}
		else if(a[i]=='l'){
			a[i]='1';
		}
		else if(a[i]=='Z'){
			a[i]='2';
		}
		else if(a[i]=='S'){
			a[i]='5';
		}
		else if(a[i]=='b'){
			a[i]='6';
		}
		else if(a[i]=='B'){
			a[i]='8';
		}
		else if(a[i]=='q'){
			a[i]='9';
		}
		printf("%c", a[i]);
	}
	return 0;
}

2010: 【入门】电报文字  题目传送门

#include <bits/stdc++.h>
using namespace std;
char a[10000];
int main()
{
	gets(a);
	for(int i=0; i<strlen(a); i++){
		if(a[i]>='a' && a[i]<='z'){
			if(a[i]!='z'){
				a[i]++;	
			}
			else{
				a[i]='a';	
			}
		}
	}
	for(int i=0; i<strlen(a); i++){
		printf("%c",a[i]);
	}
	return 0;
}

2101: 【入门】字符串的反码  题目传送门

#include <bits/stdc++.h>
using namespace std;
int l;
char asd[80];
int main()
{
	gets(asd);
	l=strlen(asd);
	for(int i=0; i<l; ++i){
		if(asd[i]>='a' && asd[i]<='z'){
			printf("%c", 'z'-asd[i]+'a');
		}
		else if(asd[i]>='A' && asd[i]<='Z'){
			printf("%c", 'Z'-asd[i]+'A');
		}
		else{
			printf("%c", asd[i]);
		}
	}
	return 0;
}

2007: 【入门】保留整数  题目传送门

#include <bits/stdc++.h>
using namespace std;
int l;
bool flag;
char asd[80];
int main()
{
	gets(asd);
	l=strlen(asd);
	for(int i=0; i<l; ++i){
		//每次输出数字之前先检查前面有没有字符子串 
		if(asd[i]>='0' && asd[i]<='9'){
			if(flag){	//表示前面有非数字的字符子串 
				flag=false;
				printf("*");
			}
			printf("%c", asd[i]);
		}
		else{
			flag=true;
		}
	}
	if(flag){	//以字符结尾时 
		printf("*");
	}
	return 0;
}

2102: 【基础】删除字符串中间的*  题目传送门

#include <bits/stdc++.h>
using namespace std;
int l, first, last;
string asd;
int main()
{
	getline(cin, asd);
	l=asd.length();
	//找到第一个不是'*'的下标 
	for(int i=0; i<l; ++i){
		if(asd[i]!='*'){
			first=i;
			break;
		}
	}
	//找到最后一个不是'*'的下标 
	for(int i=l-1; i>=0; --i){
		if(asd[i]!='*'){
			last=i;
			break;
		}
	}
	for(int i=0; i<first; ++i){
		printf("%c", asd[i]);
	}
	for(int i=first; i<=last; ++i){
		if(asd[i]!='*'){
			printf("%c", asd[i]);	
		}
	}
	for(int i=last+1; i<l; ++i){
		printf("%c", asd[i]);
	}
	if(first==last && first==0){	//假如全是***, 会少输出一个, 这里单独加一个 
		printf("*");
	}
	return 0;
}

2103: 【基础】字符串压缩  题目传送门

#include <bits/stdc++.h>
using namespace std;
char s[256]; 
int l, cnt=1;
int main()
{
	scanf("%s", &s);
	l=strlen(s);
	for(int i=0; i<l; ++i){
		if(s[i]==s[i+1]){
			cnt++;
		}
		else{
			if(cnt==1)
				printf("%c", s[i]);
			else
				printf("%d%c", cnt, s[i]);
			cnt=1;
		}
	}
	return 0;
}

2104: 【基础】最长单词  题目传送门

#include <bits/stdc++.h>
using namespace std;
string s;
char ans[256]; 
int l, mx, cnt;
int main()
{
	//输入一行带空格的字符串 
	getline(cin, s);
	l=s.length();
	for(int i=0; i<l; ++i){
		//没到最后, 并且不等于空格 
		if(s[i]!=' ' && i!=l-1){
			cnt++;	//当前单词的长度 
		}
		else if(s[i]==' '){	//遇到空格,开始新的单词 
			if(cnt>mx){
				mx=cnt;
				for(int j=1; j<=mx; ++j){
					ans[j]=s[i-j];
				}
			}
			cnt=0;
		}
		else if(i==l-1){	//最后一个单词 
			if(cnt+1>mx){
				mx=cnt+1;
				for(int j=1; j<=mx; ++j){
					ans[j]=s[i-j+1];
				}
			}
		}
	}
	for(int i=mx; i>=1; --i){
		printf("%c", ans[i]);
	}
	return 0;
}

2105: 【基础】字符串连接    题目传送门

#include <bits/stdc++.h>
using namespace std;
string s1, s2;
bool vis[27];
int l1, l2;
int main()
{
	cin >> s1 >> s2;
	l1=s1.length();
	l2=s2.length();
	for(int i=0; i<l1; ++i){
		if(vis[s1[i]-'a'+1]==false){
			cout << s1[i];
			vis[s1[i]-'a'+1]=true;
		}
	}
	for(int i=0; i<l2; ++i){
		if(vis[s2[i]-'a'+1]==false){
			cout << s2[i];
		}
	}
	return 0;
}

2705: 【基础】猜数字II    题目传送门

#include <bits/stdc++.h>
using namespace std;
char n[10];
int l, b, tag, num, cnt, temp;
int main()
{
	scanf("%s", &n);
	scanf("%d", &b);
	l=strlen(n);
	for(int i=0; i<l; ++i){
		if(n[i]=='?'){
			tag=l-i-1;	//转换为10^tag次 
		}
		else{
			num+=(n[i]-'0')*pow(10, l-i-1);
		} 
	}
	for(int i=0; i<=9; ++i){
		temp=num+i*pow(10, tag);
		if(temp%b==0){
			cnt++;
			printf("%d\n", i);
		}
	}
	if(cnt==0){
		printf("-1");
	}
	return 0;
}

2722: 【基础】动物简介     题目传送门

#include<bits/stdc++.h>
using namespace std;
int n, len, l, ans;
char mod[500], s[500];
int main()
{
	scanf("%d %s",&n, mod);	//动物的名字 
	len=strlen(mod);
	while(scanf("%s",s)!=EOF){
		if(strlen(s)<len)
			continue;
		else{
			l=strlen(s);
			bool ok;
			for(int i=0; i<l; i++){
				ok=1;
				for(int j=0; j<len; j++){
					if(s[i+j]!=mod[j]){	//有不匹配的 
						ok=0;
						break;
					}
				}
				if(ok)
					ans++;
			}
		}
	}
	printf("%d\n",ans);
	return 0;
}

1049: 【入门】判断是否构成回文    题目传送门

#include <bits/stdc++.h>
using namespace std;
int n, j;
string s;
int main()
{
	getline(cin, s);
	n=s.length()-1;
	for(int i=0; i<n/2; ++i){
		j=n-i-1;
		if(s[i]!=s[j]){
			printf("FALSE");
			return 0;
		}
	}
	printf("TRUE");
	return 0;
}

1059: 【基础】隐藏的最大整数    题目传送门

每个单词比较

#include <bits/stdc++.h>
using namespace std;
int n, mx, cur, curid, mxid;
string s;
bool flag;	//flag为false表示重新开始找数字, flag为true表示累加数字 
int main()
{
	getline(cin, s);
	n=s.length();
	for(int i=0; i<n; ++i){
		//如果s[i]不是数字, 重新开始找整数 
		if(s[i]>'9' || s[i]<'0'){
			flag=false;	//重新找数字
			if(cur>mx){	//和最大值比较 
				mx=cur;
				mxid=curid;
				cur=0;
			}
		}
		else{	//s[i]是数字 
			if(flag){	//前面已经有数字了, 直接累加 
				cur=cur*10+s[i]-'0';
			}
			else{	//前面的数字断开了 
				cur=s[i]-'0';
				curid=i+1;
				flag=true; 
			}
		}
	}
	if(cur>mx){
		mxid=curid;
	}
	printf("%d", mxid);
	return 0;
}

每一行比较

#include<bits/stdc++.h>
using namespace std;
int n, len, l, ans;
char mod[500];
string s;
int main()
{
	scanf("%d", &n);
	scanf("%s ", mod);	//本题测试数据不规范, 需要用%s后面加空格的方法来吞掉多余的字符 
	len=strlen(mod);
	while(n--){
		getline(cin,s);	//C++读入一行中间含空格的字符串 
		l=s.length();
		if(l<len)
			continue;
		else{
			bool ok;
			for(int i=0; i<l; i++){	//枚举每一行动物简介 
				ok=1;
				//从动物简介的第i个位置和动物的名字开始挨个比较 
				for(int j=0;j<len;j++){	//枚举动物名字 
					if(s[i+j]!=mod[j]){	//只要出现和动物名字不相等的,就不比了 
						ok=0;
						break;
					}
				}
				//完全匹配 
				if(ok){
					//找到一个  
					ans++;
				} 
			}
		}
	}
	printf("%d\n",ans);
	return 0;
}

1075: 【基础】趣味填空    题目传送门

#include <bits/stdc++.h>
using namespace std;
int n, rightnum, a, b, id;
string s;
bool flag;
int main()
{
	getline(cin, s);
	n=s.length();
	for(int i=0; i<n; ++i){
		if(s[i]=='='){
			flag=true;
			id=i-1;	//找=左边数字最后一位的下标 
		}
		else if(flag==true && s[i]>='0' && s[i]<='9'){	//计算等号右边的数 
			rightnum=rightnum*10+s[i]-'0';
		}
	}
	//i枚举+右边数的第一个可能的位置 
	for(int i=1; i<=id; ++i){
		a=0;
		b=0;
		//计算此时+左边的数字 
		for(int j=0; j<i; ++j){
			a=a*10+s[j]-'0';
		}
		//计算此时+右边的数字
		for(int j=i; j<=id; ++j){
			b=b*10+s[j]-'0';
		}
		if(a+b==rightnum){	//判断能否满足条件 
			printf("%d+%d=%d", a, b, rightnum);
			return 0;
		}
	} 
	printf("Impossible!");
	return 0;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ypeijasd

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

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

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

打赏作者

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

抵扣说明:

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

余额充值