#include <iostream> using namespace std; #include <string> char A[3][3][4] = {{{'a','b','c'},{'d','e','f'},{' ',' ',' '}}, {{'g','h','i'},{'j','k','l'},{'m','n','o'}} ,{{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}} }; //三维数组存放键盘样式 //匹配按键 int point(char ch){ for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ for (int k = 0 ; k < 4; k++){ if (ch == A[i][j][k]) return i*10+j; //每一个按键的i*10+j都不同,可以用于区分按键 相当于一个密码的作用 } } } return -1; } //计算按几下当前按键才是需要的字母 int key(char ch){ int p = point(ch); int i = p/10; int j = p%10; for (int k = 0; k < 4; k++){ if (ch == A[i][j][k]) return k+1;//需要返回按下的次数 } return -1; } int main() { string str; int m,n; while (cin >> str) { // 注意 while 处理多个 case int count = 0; //时间段计数 for (int i = 0; str[i] != '\0'; i++){ //匹配按键 m = point(str[i]); n = point(str[i+1]); if (str[i+1] == '\0') n = m+1; //最后一位 使m n不等 if (m == n){ count = count + key(str[i]) + 2; } else{ count += key(str[i]); } } cout << count << endl; } } // 64 位输出请用 printf("%lld")