开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情
字母转换
输入一个小写字母,输出其对应的大写字母。例如输入 q ,会输出 Q。
代码如下:
#include<iostream>
using namespace std;
int main() {
char ch, ans;
cin >> ch;
ans = ch - 'a' + 'A';
cout << ans;
return 0;
}
运行结果:
q
Q
记录:
上述代码可以理解为:将 ch 的 ASCII 数字减去 a 的 ASCII 数字,此时得到的就是 的数字,该数字表示的是从 0 开始计算是第几个字母(比如 q 是第16个)。最后加上 A 的 ASCII 数字(也就是65),就可以得到 Q 的 ASCII 数字。
另外,由于每个大写字母和小写字母在 ASCII 表里头刚好相差 32,(小写字母的 ASCII 比较大),利用这个特点,我们也可以这样来编写代码:
#include<iostream>
using namespace std;
int main() {
char ch, ans;
cin >> ch;
ans = ch - 32;
cout << ans;
return 0;
}
虽然
ans实际上存储的是一个数字,但是毕竟是字符型变量,因此直接使用cout输出时还是会输出 ASCII 码对应的字符。
数字反转
输入一个不小于 100 且小于 1000,同时包括小数点后位的一个浮点数,例如 123.4,要求把这个数字翻转过来,变成 4.321 并输出。
- 解法一:
- 分离这个数字的所有位数
#include <iostream>
using namespace std;
int main() {
double p;
cin >> p; // 输入数字
int q;
q = int(p * 10); // 将输入的数字变成一个四位整数
int a, b, c, d; // 分离出来的 4 位数字
a = q / 1000; // 千位
b = q / 100 % 10; // 百位
c = q / 10 % 10; // 十位
d = q % 10; // 个位
cout << d << "." << c << b << a << endl;
return 0;
}
- 解法二:
- 将输入视为 5 个字符,直接输出即可(一个
char只能容纳一个字符)
#include <iostream>
using namespace std;
int main() {
char a, b, c, dot, d;
cin >> a >> b >> c >> dot >> d;
cout << d << dot << c << b << a;
return 0;
}
- 解法三:
- 使用
scanf()和printf()两个 C 语言风格的输入输出。
#include <cstdio>
using namespace std;
int main() {
char a, b, c, d;
scanf("%c%c%c.%c", &a, &b, &c, &d);
printf("%c.%c%c%c", d, c, b, a);
return 0;
}
在上述代码运行中:
- 计算机期望读取到
“[一个字符][一个字符][一个字符].[一个字符]”这样格式的输入数据。- 当读到数据 的时候,就会分析这个输入,并拆分成
“[1][2][3].[4]”。- 最后,再按照特定的格式进行输出,即
“[一个字符].[一个字符][一个字符][一个字符]”。- 这里第一个占位符的数据 由
d来提供,然后输出一个.,接着c、b、a这三个变量的会依次放入到剩余的占位符中。- 最后将结果输出来,即 ,注意输出变量时前面不需要添加
&符号。