题目要求统计打出一条含有大小写的字符串需要切换Caps Lock键的次数。
总时间限制: 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。