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

标签 c string char character

我是 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

例如,字符串 A 的用户输入可以是 'dog', 所述程序然后将 [d][o][g] 作为 [4][6][7] 存储在字符串 B 中。 下面的代码适用于最多四个字符的字符串,但必须有更有效的方法来执行此操作。

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;
}

最佳答案

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

1 + (strA[i] - 'a') % 9

您真的不想用一长串 if 语句或 switch 语句来实现它。

如果您有非字母字符、数字字符、大写字符等,您自然会遇到输入验证问题。我想您可以简单地忽略这些以进行学习练习。

关于将字符串数组字符转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333019/

相关文章:

c - c中的输出问题

c - 从字符串中提取子字符串时出现意外行为

C 将 Char* 的二维数组展平为一维

c - Unix信号量问题

c - 在 linux 中实现 rm 命令的 C 代码中的段错误

c - 为什么 C 代码中的 1.0f 在生成的程序集中表示为 1065353216?

sql - 标准 SQL - CHAR 到 ASCII

java - 如何防止 substr() 上出现 NullPointerException?

c - 字符串链表的每个节点都有相同的字符串

c++ - 如何将整数转换为其等效的 ascii