Skip to content

Latest commit

 

History

History
75 lines (62 loc) · 2.01 KB

4095.md

File metadata and controls

75 lines (62 loc) · 2.01 KB

大小写切换 4095: 打字员

题目要求统计打出一条含有大小写的字符串需要切换Caps Lock键的次数。

题目来源

4095: 打字员

总时间限制: 1000ms 内存限制: 65536kB

描述

有一个打字员,他打字的时候有个习惯,从来不用 Shift 来切换大小写,只用 Caps Lock。 现在给他一个地铁站的名字,你需要写一个程序来告诉他,他需要敲击多少下键盘才能打出 这个地铁站名。

输入

第一行输入一个数字 n (n<1000),表示共有多少个需要处理的车站名。从第 2 到第 n+1 行是这 n 个车站名。车站名由英文字母构成,名字的长度不会超过 100 个字符。已知开始时 键盘是输入小写字母的状态。

输出

这个打字员敲击键盘的次数。

样例输入

5
BeiJingDaXueDongMen
AAAaaaBBBbbbABAB
AmericanRAILWAY
AaAaAa
DFjfkdaB

样例输出

31
21
18
12
11

初始为小写字母状态,从左向右依次遍历字符串,记录当前的大小写状态,当发现前后字母状态不一致时,累加一次,最后统计结果。

#include <iostream>
using namespace std;
int main() {
	int n, i;
	char cstr[101];
	cin >> n;
	for (i = 0; i < n; ++i) {
		cin >> cstr;
		int sign = 1, idx = 0, sum = 0;
		while (cstr[idx] != '\0') {
			if (cstr[idx++] >= 'a') {
				if (sign == -1) {
					sum++;
					sign = 1;
				}
			}
			else {
				if (sign == 1) {
					sum++;
					sign = -1;
				}
			}
			sum++;
		}
		cout << sum << endl;
	}
	return 0;
}

4095.cpp 代码长度:411B 内存:264kB 时间:12ms 通过率:95% 最小内存:256kB 最短时间:0ms

打印的字符串中仅考虑字母,小写字母ASCII码大于96,大写字母小于92,通过这个特性可以判别字母的大小写。用一个符号位记录当前的大小写状态,之后判断累加即可。

有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。