将字符串数组字符转换为数字

sal*_*tus 1 c string character char

我是C的新手.我在GWBASIC很有经验.为了学习,我试图编写一个程序,将字符串中的各个字符转换为数值,如下所示:

1 2 3 4 5 6 7 8 9
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
Run Code Online (Sandbox Code Playgroud)

例如,字符串A的用户输入可以是"dog",然后程序将[d] [o] [g]存储为字符串B中的[4] [6] [7].以下代码适用于字符串w /最多四个字符,但必须有一个更有效的方法来做到这一点.

int main()
{
    char a[0];
    char b[0];
    scanf("%s",a);
    if (a[0] == 'a' || a[0] == 'j' || a[0] == 's') b[0] = '1';
    if (a[0] == 'b' || a[0] == 'k' || a[0] == 't') b[0] = '2';
    if (a[0] == 'c' || a[0] == 'l' || a[0] == 'u') b[0] = '3';
    if (a[0] == 'd' || a[0] == 'm' || a[0] == 'v') b[0] = '4';
    if (a[0] == 'e' || a[0] == 'n' || a[0] == 'w') b[0] = '5';
    if (a[0] == 'f' || a[0] == 'o' || a[0] == 'x') b[0] = '6';
    if (a[0] == 'g' || a[0] == 'p' || a[0] == 'y') b[0] = '7';
    if (a[0] == 'h' || a[0] == 'q' || a[0] == 'z') b[0] = '8';
    if (a[0] == 'i' || a[0] == 'r') b[0] = '9';
    if (a[1] == 'a' || a[1] == 'j' || a[1] == 's') b[1] = '1'; 
    if (a[1] == 'b' || a[1] == 'k' || a[1] == 't') b[1] = '2';
    if (a[1] == 'c' || a[1] == 'l' || a[1] == 'u') b[1] = '3';
    if (a[1] == 'd' || a[1] == 'm' || a[1] == 'v') b[1] = '4';
    if (a[1] == 'e' || a[1] == 'n' || a[1] == 'w') b[1] = '5';
    if (a[1] == 'f' || a[1] == 'o' || a[1] == 'x') b[1] = '6';
    if (a[1] == 'g' || a[1] == 'p' || a[1] == 'y') b[1] = '7';
    if (a[1] == 'h' || a[1] == 'q' || a[1] == 'z') b[1] = '8';
    if (a[1] == 'i' || a[1] == 'r') b[1] = '9';
    if (a[2] == 'a' || a[2] == 'j' || a[2] == 's') b[2] = '1';
    if (a[2] == 'b' || a[2] == 'k' || a[2] == 't') b[2] = '2';
    if (a[2] == 'c' || a[2] == 'l' || a[2] == 'u') b[2] = '3';
    if (a[2] == 'd' || a[2] == 'm' || a[2] == 'v') b[2] = '4';
    if (a[2] == 'e' || a[2] == 'n' || a[2] == 'w') b[2] = '5';
    if (a[2] == 'f' || a[2] == 'o' || a[2] == 'x') b[2] = '6';
    if (a[2] == 'g' || a[2] == 'p' || a[2] == 'y') b[2] = '7';
    if (a[2] == 'h' || a[2] == 'q' || a[2] == 'z') b[2] = '8';
    if (a[2] == 'i' || a[2] == 'r') b[2] = '9';
    if (a[3] == 'a' || a[3] == 'j' || a[3] == 's') b[3] = '1';
    if (a[3] == 'b' || a[3] == 'k' || a[3] == 't') b[3] = '2';
    if (a[3] == 'c' || a[3] == 'l' || a[3] == 'u') b[3] = '3';
    if (a[3] == 'd' || a[3] == 'm' || a[3] == 'v') b[3] = '4';
    if (a[3] == 'e' || a[3] == 'n' || a[3] == 'w') b[3] = '5';
    if (a[3] == 'f' || a[3] == 'o' || a[3] == 'x') b[3] = '6';
    if (a[3] == 'g' || a[3] == 'p' || a[3] == 'y') b[3] = '7';
    if (a[3] == 'h' || a[3] == 'q' || a[3] == 'z') b[3] = '8';
    if (a[3] == 'i' || a[3] == 'r') b[3] = '9';
    printf("%s\n",b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

假设您的编译器使用ASCII编码,那么您可以使用以下简单算法来获得答案:

1 + (strA[i] - 'a') % 9
Run Code Online (Sandbox Code Playgroud)

你真的不想用一长串的if陈述或一个switch陈述来实现它.

当然,如果您有非字母字符,数字字符,大写字符等,则会出现输入验证问题.我认为你可以简单地忽略那些学习练习.