我写了这个愚蠢的代码块作为“c编程现代方法第二E”一书的程序练习的答案。由K.N.King,即ch7; ex4。
我无法用更少的代码做同样的事情,所以,你能吗?
它只是将字母电话号码转换为数字形式,我真的很想看到更好的编码...
谢谢..
#include <stdio.h>
void main()
{
char c;
int phone_number;
printf("Enter phone number: ");
while((c = getchar()) != '\n') {
if(c == 'A' || c == 'B' || c == 'C')
printf("2");
if(c == 'D' || c == 'E' || c == 'F')
printf("3");
if(c == 'G' || c == 'H' || c == 'I')
printf("4");
if(c == 'J' || c == 'K' || c == 'L')
printf("5");
if(c == 'M' || c == 'N' || c == 'O')
printf("6");
if(c == 'P' || c == 'R' || c == 'S')
printf("7");
if(c == 'T' || c == 'U' || c == 'V')
printf("8");
if(c == 'W' || c == 'X' || c == 'Y')
printf("9");
if(c == '0')
printf("0");
if(c == '1')
printf("1");
if(c == '2')
printf("2");
if(c == '3')
printf("3");
if(c == '4')
printf("4");
if(c == '5')
printf("5");
if(c == '6')
printf("6");
if(c == '7')
printf("7");
if(c == '8')
printf("8");
if(c == '9')
printf("9");
if(c == '-')
printf("-");
}
printf("\n");
}
答案 0 :(得分:2)
我们可以利用字符顺序的事实(不确定这是否是标准的,但无论如何它都发生在大多数表示中)
让我们创建一个表格,指定一个字母代表的数字。它看起来像
int keynum[26] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
keynum[0]
是A
映射到的数字,依此类推。如果我们有一个字符c
,我们需要在keynum
中获取正确的索引,我们会按c-'A'
计算
然后我们的主循环将是:
while((c=getchar()) != '\n') {
if (c>='0' && c<='9')
putchar(c);
else if (c >= 'A' && c <= 'Z')
putchar('0' + keynum[c-'A'])
/* else error? */
}
答案 1 :(得分:0)
2 + ((c-'A') / 3)
(积分除)是您为A-Y打印的数字( if 'A'<=c && c<='O'
!)