C++字母转手机号程序:字符超限报错与空格switch case实现求助
问题解决:字母转手机号的超限提示与空格处理
核心问题分析
- 空格无法转1:原代码用
if (letter != ' ' && ...)直接过滤了空格,导致空格根本进不去switch分支,自然输出不了1。 - 超限提示失效:
- 只给字母计数,没算空格,不符合“含空格在内总长度≤15”的要求;
if (counter < 15); {这种写法里的分号完全破坏了条件逻辑,后面的代码块不管条件真假都会执行;- while循环里加了
counter <15,导致到第15个字符就直接停了,根本触发不了超限提示。
修正后的代码
#include <iostream> using namespace std; int main() { char letter; int counter = 0; cout << "输入内容(输入'0'终止):" << endl; while (cin.get(letter)) { // 输入0直接终止 if (letter == '0') { break; } // 检查总长度(含空格)是否超限 if (counter >= 15) { cout << "\n输入无效:总长度(含空格)超过15位" << endl; break; } // 所有非0字符都计入长度 counter++; // 单独处理空格,直接输出1 if (letter == ' ') { cout << "1"; continue; } // 处理字母:先转大写再匹配数字 if ((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z')) { if (letter > 'Z') { letter -= 32; // 小写转大写 } switch (letter) { case 'A': case 'B': case 'C': cout << "2"; break; case 'D': case 'E': case 'F': cout << "3"; break; case 'G': case 'H': case 'I': cout << "4"; break; case 'J': case 'K': case 'L': cout << "5"; break; case 'M': case 'N': case 'O': cout << "6"; break; case 'P': case 'Q': case 'R': case 'S': cout << "7"; break; case 'T': case 'U': case 'V': cout << "8"; break; case 'W': case 'X': case 'Y': case 'Z': cout << "9"; break; } } else { // 非字母非空格的无效字符提示 cout << "\n输入无效:仅允许字母和空格" << endl; break; } } return 0; }
关键修改点说明
空格处理:
- 删掉了过滤空格的条件,单独判断空格字符,直接输出1就跳过后续逻辑;
- 空格会被计入总长度counter,符合题目要求。
长度超限判断:
- 循环只判断输入是否有效,把长度检查移到循环内部;
- 只要不是终止符0,不管是空格还是字母都算入长度;
- 长度到15之后再输入任何字符(除了0),立刻输出提示并终止。
逻辑修复:
- 去掉了原代码里多余的分号,修正了条件判断的bug;
- 增加了对非字母非空格字符的错误提示;
- 把提示改成中文,更直观。
内容的提问来源于stack exchange,提问作者beepboop
相关产品推荐
相关产品推荐

