You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++字母转手机号程序:字符超限报错与空格switch case实现求助

问题解决:字母转手机号的超限提示与空格处理

核心问题分析

  • 空格无法转1:原代码用if (letter != ' ' && ...)直接过滤了空格,导致空格根本进不去switch分支,自然输出不了1。
  • 超限提示失效:
    1. 只给字母计数,没算空格,不符合“含空格在内总长度≤15”的要求;
    2. if (counter < 15); {这种写法里的分号完全破坏了条件逻辑,后面的代码块不管条件真假都会执行;
    3. 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. 空格处理:

    • 删掉了过滤空格的条件,单独判断空格字符,直接输出1就跳过后续逻辑;
    • 空格会被计入总长度counter,符合题目要求。
  2. 长度超限判断:

    • 循环只判断输入是否有效,把长度检查移到循环内部;
    • 只要不是终止符0,不管是空格还是字母都算入长度;
    • 长度到15之后再输入任何字符(除了0),立刻输出提示并终止。
  3. 逻辑修复:

    • 去掉了原代码里多余的分号,修正了条件判断的bug;
    • 增加了对非字母非空格字符的错误提示;
    • 把提示改成中文,更直观。

内容的提问来源于stack exchange,提问作者beepboop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:45:11