P6263 [COCI 2014/2015 #3] STROJOPIS

记录15

#include <bits/stdc++.h>
using namespace std;
int main() {
    string s;
	int a[10]={};
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='~'||s[i]=='1'||s[i]=='Q'||s[i]=='A'||s[i]=='Z') a[1]++;
		else if(s[i]=='2'||s[i]=='W'||s[i]=='S'||s[i]=='X') a[2]++;
		else if(s[i]=='3'||s[i]=='E'||s[i]=='D'||s[i]=='C') a[3]++; 
		else if(s[i]=='4'||s[i]=='R'||s[i]=='F'||s[i]=='V') a[4]++;
		else if(s[i]=='5'||s[i]=='T'||s[i]=='G'||s[i]=='B') a[4]++;
		else if(s[i]=='6'||s[i]=='Y'||s[i]=='H'||s[i]=='N') a[5]++;
		else if(s[i]=='7'||s[i]=='U'||s[i]=='J'||s[i]=='M') a[5]++;
		else if(s[i]=='8'||s[i]=='I'||s[i]=='K'||s[i]==',') a[6]++;
		else if(s[i]=='9'||s[i]=='O'||s[i]=='L'||s[i]=='.') a[7]++;
		else a[8]++;
	}
	for(int i=1;i<=8;i++) cout<<a[i]<<endl;
	return 0; 
}

突破点

用同一根手指按所需的键是同一颜色的。黄色键需要用小指按下,蓝色键需要用无名指,绿色键需要用中指,红色键需要用食指。自然,左手按键盘的左侧(从 5TGB 开始向左的键),右手按右侧(从 6YHN 开始向右的键),拇指负责空格。

👇👇👇

每根手指头对应不同的区域,不算大拇指,共八个手指

思路

这一题直接进行模拟输入就行了,每一块区域都需要记录,直接开数组来记录

代码简析

for(int i=0;i<s.size();i++){
		if(s[i]=='~'||s[i]=='1'||s[i]=='Q'||s[i]=='A'||s[i]=='Z') a[1]++;
		else if(s[i]=='2'||s[i]=='W'||s[i]=='S'||s[i]=='X') a[2]++;
		else if(s[i]=='3'||s[i]=='E'||s[i]=='D'||s[i]=='C') a[3]++; 
		else if(s[i]=='4'||s[i]=='R'||s[i]=='F'||s[i]=='V') a[4]++;
		else if(s[i]=='5'||s[i]=='T'||s[i]=='G'||s[i]=='B') a[4]++;
		else if(s[i]=='6'||s[i]=='Y'||s[i]=='H'||s[i]=='N') a[5]++;
		else if(s[i]=='7'||s[i]=='U'||s[i]=='J'||s[i]=='M') a[5]++;
		else if(s[i]=='8'||s[i]=='I'||s[i]=='K'||s[i]==',') a[6]++;
		else if(s[i]=='9'||s[i]=='O'||s[i]=='L'||s[i]=='.') a[7]++;
		else a[8]++;
	}

s.size()记录字符串里面元素的个数,文章的补充部分会介绍几种常用的获取字符串元素数函数

if...else if...每次只判断一个元素

else a[8]++;除去上面的情况,最后剩余的情况,最后的字符判断有点多,懒的敲

注意:a数组从1开始取,到8结束,这是符合人类思考的数数方式,不容易出差错

补充

size() 和 length():

  • 这两个函数是 string 类的成员函数,用于获取 string 对象的长度
  • 它们的功能完全相同,返回值类型是 std::string::size_type,通常是 size_t。

strlen():

  • 这是C语言标准库函数,用于获取C风格字符串(以空字符结束的字符数组)的长度。
  • 它返回的是 size_t 类型的值,表示字符串的长度,不包括结尾的空字符。
使用场景
  • 如果你使用的是string 对象,可以使用 size() 或 length()

  • 如果你处理的是C风格字符串(字符数组),应该使用 strlen()

注意:

sizeof() :

sizeof 是C++中的一个运算符,用于获取变量或类型所占用的字节数。sizeof 的结果类型是 size_t,通常用于动态内存分配和数组操作中。

  • sizeof 计算的是变量或类型所占用的字节数。
  • 对于C风格字符串(字符数组),sizeof 会计算整个数组的大小,包括结尾的空字符 \0。
  • 对于 string 对象,sizeof 计算的是对象本身的大小,而不是字符串内容的大小。

最后补充

生活中习以为常的事情,都是历史上人类的不断尝试与改进

键盘手势的固定布局及其历史背景

1. QWERTY布局的起源

QWERTY键盘布局的名称来源于其左上角的六个字母(Q, W, E, R, T, Y)。这种布局最初是为了适应机械打字机的设计而发明的。1868年,美国发明家克里斯托夫·拉森·肖尔斯(Christopher Latham Sholes)设计了一种全机械结构的打字机,最初尝试将26个英文字母按照字母表顺序分成上下两行,但这种设计很快暴露出弊端——常用字母紧挨在一起,导致打字时发生卡键现象。

为了解决这个问题,肖尔斯重新设计了键盘布局。他将常用字母分开,避免它们相邻,从而减少了卡键的可能性。例如,他把单词中连续出现的字母分开,将经常组合的字母如W、H、T等分散到键盘不同位置,同时将使用频率相对较高的字母挪到中心位置。这种设计最终形成了我们今天所熟知的QWERTY键盘布局。

2. QWERTY布局的设计原理

QWERTY键盘的核心设计理念并非为了提升打字速度,而是为了降低打字速度,以适应当时机械技术的限制。通过将常用字母分开,打字员的手指必须“长途跋涉”才能完成输入,从而降低了打字速度,减少了机械杆“打架”的可能性。

尽管这种设计在当时解决了机械打字机的卡键问题,但它并非最高效的键盘布局。实际上,这种布局在某些方面降低了打字效率。例如,QWERTY键盘的左手劳动量大约占57%,而右手劳动量较少。此外,最中间一行的字母使用率仅有30%左右,这意味着为了打一个字,手指经常需要上上下下移动。

3. QWERTY布局的普及与延续

尽管QWERTY键盘的设计存在效率问题,但它最终成为了标准键盘布局。1873年,雷明顿公司购得了肖尔斯的专利,并开始了打字机的商业生产。随着时间的推移,QWERTY键盘逐渐普及,并在1893年被几家大型打字机制造商统一采用。

即使后来的技术进步已经完全解决了打字机卡键问题,QWERTY键盘布局仍然被保留下来,主要是因为用户已经习惯了这种布局。此外,QWERTY键盘在打字竞赛中表现出色,进一步巩固了其地位。

4. 其他键盘布局

尽管QWERTY键盘是目前最广泛使用的布局,但也有其他更高效的键盘布局被提出。例如,德沃夏克键盘(Dvorak Simplified Keyboard, DSK)由奥古斯特·德沃夏克(August Dvorak)在1936年发明。德沃夏克键盘的设计原则是尽量左右手交替击打,避免单手连击,同时将最常用的字母放在容易触及的位置,从而提高打字速度。

然而,尽管德沃夏克键盘在理论上更高效,但由于QWERTY键盘已经深入人心,用户习惯了QWERTY布局,因此德沃夏克键盘并未广泛普及。

5. 现代键盘布局的挑战

在现代计算机技术中,QWERTY键盘布局仍然占据主导地位。尽管现代计算机处理器已经可以在极短的时间内完成大量的数据处理任务,但QWERTY键盘的设计仍然影响着我们的输入效率。

一些现代键盘采用了“不规则”布局或者“随机”布局,如Dvorak键盘,这些布局将常用的单词放在容易触及的位置,从而大大提高了打字速度。然而,这些替代解决方案尚未广泛普及,主要是因为用户习惯于QWERTY键盘,改变布局需要重新学习和适应。

总结

QWERTY键盘布局的固定手势和排列方式源于19世纪的机械打字机设计,旨在解决卡键问题。尽管这种设计在当时有效,但它并非最高效的键盘布局。然而,由于用户习惯和历史原因,QWERTY键盘成为了标准布局,并一直延续至今。尽管有更高效的键盘布局被提出,但由于学习成本和用户习惯,QWERTY键盘仍然是我们今天广泛使用的键盘布局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值