c语言字母转化为数字

lllllllllllllllllll; 2019-04-15 02:34:25
X公司最近研究出了一种新的编码方式,这种编码是将一串大写字母转化为数字。下面是每个字母所代表的数字。
B, F, P, V 代表 1
C, G, J, K, Q, S, X, Z 代表 2。
D , T 代表 3
L 代表 4
M , N 代表 5
R 代表 6。
另外字母A, E, I, O, U, H, W,Y不代表任何数字。你需要将每个字母转化为所代表的数字,但注意,如果连续几个字母都代表同一个数字,那么你只需要转化成一个数字就可以。比如PF,P和F都代表1,所以你只需要输出一个1,而不是两个1。不代表数字的字母不用转化
输入格式
第一行为整数T(0<T<10)代表T行测试数据,后边是T行,每行为一个只含大写字母的字符串,串长不超过20。
输出格式
为T行,每行对应输入的T行测试数据,为该行测试数据的字符串转化后的数字编码,如果没有任何编码,则输出一个空行。


输入样例
3
KHAWN
PFISTER
BOBBY
输出样例
25
1236
11
...全文
1531 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不用了 我有更简短的代码实现
但也谢谢了
wshyhm 2019-04-16
  • 打赏
  • 举报
回复
#include<stdio.h> int main() { char s1[26]; int a[26]; for (int i = 0; i < 26; ++i) // 赋初值 { s1[i] = 'A' + i; } for (int i = 0;i < 26; ++i) { if ('B' == s1[i] || 'F' == s1[i] || 'P' == s1[i] || 'V' == s1[i]) { a[i] = 1; } else if ('C' == s1[i] || 'G' == s1[i] || 'J' == s1[i] || 'K' == s1[i] || 'Q' == s1[i] || 'S' == s1[i] || 'X' == s1[i] || 'Z' == s1[i]) { a[i] = 2; } else if ('D' == s1[i] || 'T' == s1[i]) { a[i] = 3; } else if ('L' == s1[i]) { a[i] = 4; } else if ('M' == s1[i] || 'N' == s1[i]) { a[i] = 5; } else if ('R' == s1[i]) { a[i] = 6; } else { a[i] = 0; //无效数字 } } int nTmp = -1, n = 0; char s2[10][21] = {'\0'}; int nOutput[10][20] = {0}; scanf ("%d", &n); for (int i = 0; i < n; ++i) { scanf ("%s", s2[i]); } int nNum; for (int i = 0; i < n; ++i) { for (int j = 0,k = 0; j < 21; ++j) { if ('\0' == s2[i][j]) { break; } char ch = s2[i][j]; nNum = a[int(ch-'A')]; if (nNum == 0) { nTmp = 0; } if ((nNum != 0) && (nNum != nTmp)) { nOutput[i][k] = nNum; nTmp = nNum; ++k; } } } for (int i = 0; i < n; ++i) { for (int j = 0; j < 20; ++j) { if (nOutput[i][j] != 0) { printf("%d", nOutput[i][j]); } else break; } printf("\n"); } return 0; } // 代码拿去,结贴,分给我!
  • 打赏
  • 举报
回复

只是做伸手党要代码
636f6c696e 2019-04-15
  • 打赏
  • 举报
回复
你的疑问是什么?还是只是做伸手党要代码?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧