#9 手机_NOI导刊2010普及(10)

一般的手机的键盘是这样的:

1 2 abc 3 def

4 ghi 5 jkl 6 mno

7 pqrs 8 tuv 9 wxyz

  • 0 #

要按出英文字母就必须要按数字键多下。例如要按出x就得按9两下,第一下会出w,而第二下会把w变成x。0键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
输入输出格式
输入格式:
一行一个句子,只包含英文小写字母和空格,且不超过200个字符。

输出格式:
一行一个整数,表示按键盘的总次数。

输入输出样例

输入样例:
i have a dream
输出样例:
23

本小编更偏向打表的方式,因为这一道题最好的方法也是打表,不过不是写那么多if 浪费我打字的时间 所以采用了STL 可能这样的话打的会比if轻松一点
代码:不要砸鸡蛋

#include<iostream>
#include<string>
#include<map>//用到的STL 这里用了map
using namespace std;
map<char,int>m;
string str;
int ans=0;
int main(void){
	getline(cin,str);//注意有空格,所以要得geiline,不然String遇到空格是会处理为字符串输出结束的
	m['a']=1;//基本用法
	m['b']=2;
	m['c']=3;
	m['d']=1;
	m['e']=2;
	m['f']=3;
	m['g']=1;
	m['h']=2;
	m['i']=3;
	m['j']=1;
	m['k']=2;
	m['l']=3;
	m['m']=1;
	m['n']=2;
	m['o']=3;
	m['p']=1;
	m['q']=2;
	m['r']=3;
	m['s']=4;
	m['t']=1;
	m['u']=2;
	m['v']=3;
	m['w']=1;
	m['x']=2;
	m['y']=3;
	m['z']=4;
	m[' ']=1;
	for(int i=0;i<str.size();i++){
		ans+=m[str[i]];//把前面已经定义的值依次带入字符串内
	}
	cout<<ans;//结束
	return 0;
}

附:C++中的STL中map用法详解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值