输入一个字符串,将字母转换为数字然后输出

输入一个字符串,将字母转换为数字然后输出
该代码输出只能得到一堆数字9 想问是哪里出了问题

#include<stdio.h>
void main()
{
        int i=0;
        char arr[80]={0};
        char ch;
        printf("请输入电话号码,以#键结束\n");
        while((ch=getchar())!='#'&&ch!=EOF)
        {
            arr[i++]=ch;
        }
        for(i=0;arr[i]!='\0';i++)
        {
            if('A'<=arr[i]<='C') arr[i]='2';
            if('D'<=arr[i]<='F') arr[i]='3';
            if('G'<=arr[i]<='I') arr[i]='4';
            if('J'<=arr[i]<='L') arr[i]='5';
            if('M'<=arr[i]<='O') arr[i]='6';
            if('P'<=arr[i]<='S') arr[i]='7';
            if('T'<=arr[i]<='V') arr[i]='8';
            if('W'<=arr[i]<='Y') arr[i]='9';
        }
        printf("\n%s\n",arr);
}

if 判断 不能这样写,修改如下:

#include<stdio.h>
void main()
{
    int i=0;
    char arr[80]={0};
    char ch;
    printf("请输入电话号码,以#键结束\n");
    while((ch=getchar())!='#'&&ch!=EOF)
    {
        arr[i++]=ch;
    }
    for(i=0;arr[i]!='\0';i++)
    {
        if('A'<=arr[i] && arr[i] <='C') arr[i]='2';
        if('D'<=arr[i] && arr[i] <='F') arr[i]='3';
        if('G'<=arr[i] && arr[i] <='I') arr[i]='4';
        if('J'<=arr[i] && arr[i] <='L') arr[i]='5';
        if('M'<=arr[i] && arr[i] <='O') arr[i]='6';
        if('P'<=arr[i] && arr[i] <='S') arr[i]='7';
        if('T'<=arr[i] && arr[i] <='V') arr[i]='8';
        if('W'<=arr[i] && arr[i] <='Y') arr[i]='9';
    }
    printf("\n%s\n",arr);
}
 

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7571068
  • 这篇博客你也可以参考下:输入一个字符串,然后删除你输入的那个字符并且输出最终的字符串
  • 除此之外, 这篇博客: 字符串输入输出函数和字符串处理函数中的 字符串处理函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •         c 库提供了许多处理字符串的函数,ASCL C 把这些函数的原型放在 string.h 头文件中。其中最常用的函数有 strlen()、strcat()、strcmp()、strcpy().....等等等等

  • 您还可以看一下 童金浩老师的架构师转型方法与架构设计理论:向大数据架构师转型课程中的 架构设计与架构师_03:架构师角色小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题原因:代码缺少将字母转换为数字的过程,请注意查看参考资料和问题要求。

    解决方案:在对字符串中的每个字母进行转换时,需要用到ASCII码表进行转换,具体的做法是将字母减去字符'a'的ASCII码值得到数字的大小,为了确保数字在合理范围内,还需要对数字取模并加上一个合适的常数。下面给出代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int letter_to_num(char c) {
        int num = (int)c - (int)'a' + 1;
        num = (num % 9) + 1; // 取模加常数
        return num;
    }
    
    void str_to_num(char *str) {
        size_t len = strlen(str);
        for (int i = 0; i < len; i++) {
            if (str[i] >= 'a' && str[i] <= 'z') {
                printf("%d", letter_to_num(str[i]));
            } else {
                printf("%c", str[i]);
            }
        }
    }
    
    int main() {
        char *str = "hello world";
        str_to_num(str);
        return 0;
    }
    

    代码解析:

    1. 定义letter_to_num函数,该函数将字母转换为数字。

    2. 定义str_to_num函数,该函数将字符串中的字母转换为数字。

    3. 循环遍历字符串中每个字符,如果是字母则调用letter_to_num函数转换为数字并输出,否则直接输出该字符。

    4. 在main函数中定义一个字符串,然后调用str_to_num函数将字符串中的字母转换为数字并输出。

    注意事项:在使用该代码前,需要确保输入的字符串中只包含字母和数字,否则程序可能会出现异常。