.编写字母数字转换程序,某手机键盘如图所示,输入一个字符串,判断字符串上的字符是否都在图示手机键盘上,若有不在手机键盘上的字符,则提示字符串非法;若是合法的字符串,将字符串中的字母根据手机键盘上的对应关系转换为数字,其它字符不变,输出转换后的字符串。不论判断字符串是否合法还是转换,均不考虑字母大小写。
时间: 2023-06-05 13:04:36 浏览: 86
这是一个编程问题,我可以为您提供一个基本的思路。首先,您可以将手机键盘上的字母和数字建立一个对应关系,例如使用字典或者列表来存储。然后,对于输入的字符串,遍历字符串中的每个字符,判断它是否在手机键盘的对应关系中出现。如果有一个字符不在对应关系中,则提示字符串非法;否则,根据对应关系将字母转换为数字,并将转换后的字符串输出即可。您可以使用 Python 或者其他编程语言来实现。
相关问题
用python编写字母数字转换程序,某手机键盘如图所示,输入一个字符串,判断字符串上的字符是否都在图示手机键盘上,若有不在手机键盘上的字符,则提示字符串非法;若是合法的字符串,将字符串中的字母根据手机键盘上的对应关系转换为数字,其它字符不变,输出转换后的字符串。不论判断字符串是否合法还是转换,均不考虑字母大小写。
这是一个技术问题,我可以回答。以下是Python代码实现:
```python
def is_valid_string(s):
keyboard = ["123", "456", "789", "*0#"]
for char in s.lower():
if char.isalnum() and char not in "".join(keyboard):
return False
return True
def convert_string(s):
keyboard = {"abc": "2", "def": "3", "ghi": "4", "jkl": "5", "mno": "6", "pqrs": "7", "tuv": "8", "wxyz": "9"}
result = ""
for char in s.lower():
if char.isalpha():
for k, v in keyboard.items():
if char in k:
result += v
break
else:
result += char
return result
input_str = input("请输入一个字符串:")
if not is_valid_string(input_str):
print("非法字符串!")
else:
print(convert_string(input_str))
```
该程序中,`is_valid_string`函数用于判断字符串是否合法(即是否所有字符都在手机键盘上),`convert_string`函数用于将合法字符串中的字母转换为数字。最后判断输入的字符串是否合法,若非法则输出提示,若合法则输出转换后的结果。
从键盘输入一个长度不超过100个字符的字符串,然后做如下操作: (1)将字串中的小写字母转为大写,大写字母转为小写,而其它字符不作处理。(2)将字串输出保存到一个名为“ex801.txt”的文本文件中。注:文本文件ex801.txt应与源码文件ex801.c保存在同一个文件夹中。目前,已编写完成main函数,请用C++编程实现writeToFile函数,具体功能和要求如下所示。/* @Filename: ex801.c @Author: 鞠成东 @Version: 1.0 @Date: 2021-03-18 @Description: 文件字符读写 / #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char argv[]){ /(1)声明函数及变量/ int writeToFile(char str, char fileName, char mode); char str[100]; char fileName[] = “ex801.txt”; /(2)获取键盘输入字串/ fgets(str, 100, stdin);得到(str);将回车看作字串输入结束标志,字串中可以有空格 //scanf(“%s”, str);将空格看作字串输入结束标志,字串中不能有空格 /(3)将字串写入文件*/ int charNum = writeToFile(str, fileName, “w”);if(charNum < 0){ //printf(“write error”);//用于调试 return -1; } return 0;} /* * 函数名称:writeToFile * 函数功能:将字串写入文件 * 形式参数:char *str,一维字符数组(字符串)首地址 * 形式参数:char *fileName,待写入的文件路径及名称 * 形式参数:char *mode,文件使用方式 * 返 回 值:int型,若文件打开异常,返回 -1;否则返回写入到文件的字符数 */ int writeToFile(char *str, char *fileName, char *mode){ // 请编程实现本函数 } 其他说明:无 【源文件名】ex801.c 【输入形式】标准输入:从键盘任意输入不超过100个字符的字串 【输出形式】文件输出:将字串转换后输出到文件
以下是writeToFile函数的实现:
```c++
int writeToFile(char *str, char *fileName, char *mode){
FILE *fp = fopen(fileName, mode); // 打开文件
if(fp == NULL){ // 判断文件是否打开成功
return -1;
}
int len = strlen(str);
for(int i=0;i<len;i++){
if(str[i]>='a' && str[i]<='z'){ // 小写字母转大写
fputc(str[i]-'a'+'A', fp);
}
else if(str[i]>='A' && str[i]<='Z'){ // 大写字母转小写
fputc(str[i]-'A'+'a', fp);
}
else{ // 其他字符不作处理
fputc(str[i], fp);
}
}
fclose(fp); // 关闭文件
return len;
}
```
完整代码如下:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int writeToFile(char *str, char *fileName, char *mode);
int main(int argc, char *argv[]){
char str[100];
char fileName[] = "ex801.txt";
fgets(str, 100, stdin);
int charNum = writeToFile(str, fileName, "w");
if(charNum < 0){
printf("write error\n");
return -1;
}
return 0;
}
int writeToFile(char *str, char *fileName, char *mode){
FILE *fp = fopen(fileName, mode);
if(fp == NULL){
return -1;
}
int len = strlen(str);
for(int i=0;i<len;i++){
if(str[i]>='a' && str[i]<='z'){
fputc(str[i]-'a'+'A', fp);
}
else if(str[i]>='A' && str[i]<='Z'){
fputc(str[i]-'A'+'a', fp);
}
else{
fputc(str[i], fp);
}
}
fclose(fp);
return len;
}
```
输入一个字符串,程序会将其转换后输出到名为ex801.txt的文本文件中。
阅读全文