输入一个字符串,将字母转换为数字然后输出
该代码输出只能得到一堆数字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);
}
c 库提供了许多处理字符串的函数,ASCL C 把这些函数的原型放在 string.h 头文件中。其中最常用的函数有 strlen()、strcat()、strcmp()、strcpy().....等等等等
问题原因:代码缺少将字母转换为数字的过程,请注意查看参考资料和问题要求。
解决方案:在对字符串中的每个字母进行转换时,需要用到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;
}
代码解析:
定义letter_to_num函数,该函数将字母转换为数字。
定义str_to_num函数,该函数将字符串中的字母转换为数字。
循环遍历字符串中每个字符,如果是字母则调用letter_to_num函数转换为数字并输出,否则直接输出该字符。
在main函数中定义一个字符串,然后调用str_to_num函数将字符串中的字母转换为数字并输出。
注意事项:在使用该代码前,需要确保输入的字符串中只包含字母和数字,否则程序可能会出现异常。