字符串的简单应用

1.凯撒密码

题目背景

某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。

题目描述

蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 n 位形成的。z 的下一个字母是 a,如此循环。他现在找到了移动前的原文字符串及 n,请你求出密码。

输入格式

第一行:n。第二行:未移动前的一串字母

输出格式

一行,是此蒟蒻的密码

输入输出样例

输入 #1

1
qwe

输出 #1

rxf

说明/提示

字符串长度<=50

代码实现:

#include <iostream>
using namespace std;
int main() {
	int n;
	string str;
	cin>>n;
	cin>>str;
	n = n % 26;
	for(int i = 0; i < str.length(); i++) {
		int tmp = str[i] + n;
		if(tmp > 122) { //如果ascii码值大于122 
			//在重头(超过122从a开始)开始循环前的移动步数加上 
			//重头开始后的移动步数等于n
			int m = 122 - str[i];
			int s = n - m - 1 ;
			str[i] = 'a' + s;
		} else {
			str[i] = str[i] + n;
		}
	}
	cout<<str<<endl;
	return 0;
} 

原题链接:https://www.luogu.com.cn/problem/P1914

2.自动修正

题目描述

大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。

输入输出样例

输入 #1

Luogu4!

输出 #1

LUOGU4!

代码实现:

#include <iostream>
using namespace std;
int main() {
	string str;
	//a  => 97
	//b  => 98
	//A  => 65
	//B  => 66
	cin>>str;
	for(int i = 0; i < str.length(); i++) {
		if(str[i] >= 'a' && str[i] <= 'z') {
			str[i] = str[i] - 32; 
		}
	}
	cout<<str<<endl;
	return 0;
}

原题链接:https://www.luogu.com.cn/problem/P5733

3.数字游戏

题目描述

小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。

注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101”(不含双引号)为一个长度为 3 的 01 字符串。

输入格式

输入文件只有一行,一个长度为 8 的 01 字符串 s。

输出格式

输出文件只有一行,包含一个整数,即 01 字符串中字符 1 的个数。

输入输出样例

输入 #1

00010100

输出 #1

2

输入 #2

11111111

输出 #2

8

说明/提示

【输入输出样例 1 说明】

该 01 字符串中有 2 个字符 1。

【输入输出样例 2 说明】

该 01 字符串中有 8 个字符 1。

【数据规模与约定】

对于 20% 的数据,保证输入的字符全部为 0。

对于 100% 的数据,输入只可能包含字符 0 和字符 1,字符串长度固定为 8。

代码实现:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	char s[10];
	cin>>s;
	int ans = 0;
	for(int i = 0; i < strlen(s); i++) {
		if(s[i] == '1') ans++;
	}
	cout<<ans<<endl;
	return 0;
}

原题链接:https://www.luogu.com.cn/problem/P5660

4.唯一字符

题目描述

输入一个字符串,找到第一个仅出现一次的字符,输出这个字符。 如果没有找到,则输出"no find"。

  • 输入格式:字符串长度<100,没有空格。
  • 输出格式:第一个仅出现一次的字符,或者"no find"

输入输出样例

输入 #1

abcabd

输出 #1

c

代码实现:

方法一:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	char str[110];
	int vis[100];
	//初始化: 
	//方法1: 
	for(int i = 0; i <= 100; i++) vis[i] = 0;
	//方法2:
	memset(vis,0,sizeof(vis)); 
	//方法3:将数组定义在main函数外 ,默认初始化值为0 
	cin>>str;
	for(int i = 0; i < strlen(str); i++) {
		for(int j = 0; j < strlen(str); j++) {
			//char只能进行单个字符判断是否相等 
			if(str[i] == str[j]) {
				vis[i]++;
			}
		}
		if(vis[i] == 1) {
			cout<<str[i]<<endl;
			return 0; 
		}
	} 
	cout<<"no find"<<endl;
	return 0;
}

方法二:

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	string str;
	cin>>str;
	for(int i = 0; i < str.size(); i++) {
		if(str.find(str[i]) == str.rfind(str[i])) {
			cout<<str[i]<<endl;
			return 0;
		}
	} 
	cout<<"no find"<<endl;
	return 0;
}

5.数字转罗马

题目描述

给定一个字符串,里面有一些数字,要求将他们都替换成罗马数字。

罗马数字:{“0”,“I”,“II”,“III”,“IV”,“V”,“VI”,“VII”,“VIII”,“IX”} (罗马数字没0,这里就使用0代替)

输入输出格式

  • 输入一行字符串。

  • 输出将数字转化为罗马数字后的字符串。

输入输出样例

输入 #1

hello0123world

输出 #1

hello0IIIIIIworld

代码实现:

#include <iostream>
using namespace std;
char ch[20][20] = {"0","I","II","III","IV","V","VI","VII","VIII","IX"};
string up(string ans) {
	string tmp;
	for(int i = 0; i < ans.length(); i++) {
		if(ans[i] >= '1' && ans[i] <= '9') {
			int t = ans[i] - '0';
			tmp += ch[t];
		} else {
			tmp += ans[i];
		}
	}
	return tmp;
}
int main() {
	string str;
	cin>>str;
	str = up(str);
	cout<<str<<endl;
	return 0;
} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@李思成

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

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

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

打赏作者

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

抵扣说明:

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

余额充值