C++密码译成明文(可以读取空格)

本文详细介绍了一种在C++中实现密码从密文到明文转换的算法,包括字符编码处理、条件判断优化及不同输入方法对比。通过具体代码示例,展示了如何正确处理大小写字母的移位加密,并特别关注了空格与特殊字符的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C++中字符值为0的是空格,字符0的值是48

void 密码译成明文()
{//缘由https://bbs.youkuaiyun.com/topics/395002145
	string a = ""; cin >> a;
	int i = 0, s = 0;
	while (a[i] != '\0')
	{
		s = (int)a[i];
		if (s >= 65 && s <= 90)s += 32;
		cout << ((s >= 97 && s <= 122) ? (char)((s + 3) > 122 ? (s - 23) : (s + 3)) : a[i]);
		++i;
	}
	cout << endl;
}
不用求余的方法
(s + 3) > 122 ? (s - 23) : (s + 3)等同于((s + 3) % 122 + 96)
假如判断一个数字在小写26个字符中的字符则(s + 3) > 122 ? (s - 26) : (s + 3)
if(s > 122 )s -= 26;等同于s % 122 + 96
void 密码译成明文()
{//缘由https://bbs.youkuaiyun.com/topics/395002145
	string a = ""; cin >> a;
	int i = 0, s = 0;
	while (a[i] != '\0')
	{
		s = (int)a[i];
		if (s >= 65 && s <= 90)cout << (char)((s + 35 > 122) ? (s + 9) : (s + 35));
		else if ((s >= 97 && s <= 122))cout << (char)(((s + 3) > 122) ? (s - 23) : (s + 3));
		else cout << a[i];
		++i;
	}
	cout << endl;
}

cin函数无法读取空格字符要特殊处理,或使用gets_s函数。char s[100];gets(s);int len = strlen(s);

void 密码译成明文()
{//缘由https://bbs.youkuaiyun.com/topics/395002145 ctrl+z退出
	cin >> noskipws;
	char a; 
	int s = 0;
	while (cin >> a)
	{
		s = (int)a;
		if (s >= 65 && s <= 90)
			cout << (char)((s + 35 > 122) ? (s + 9) : (s + 35));
		else if ((s >= 97 && s <= 122))
			cout << (char)(((s + 3) > 122) ? (s - 23) : (s + 3));
		else if (a == '@')
			cout << ",";
		else
			cout << a;
	}
	cout << endl;
}
void 密码译成明文()
{//缘由https://bbs.youkuaiyun.com/topics/395002145
	string a = "";
	getline(cin, a);//可读取空格
	int s = 0, i = 0;
	while (a[i] != '\0')//while (a[i])
	{
		s = (int)a[i];
		if (s >= 65 && s <= 90)
			cout << (char)((s + 35 > 122) ? (s + 9) : (s + 35));
		else if ((s >= 97 && s <= 122))
			cout << (char)(((s + 3) > 122) ? (s - 23) : (s + 3));
		else if (a[i] == '@')
			cout << ",";
		else
			cout << a[i]; ++i;
	}
	cout << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值