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

如何用C++实现输入文本中的数字转英文文本并整合输出?

问题:将含数字的文本中的数字转换为英文单词并整合输出

需求:实现C++程序,将用户输入的含数字文本中的数字转换为对应英文单词,输出整合后的文本。例如输入"My School Number is 5674",期望输出"my school number is five six seven four"。目前已实现单个数字转英文文本的功能,但无法将原文本与转换后的数字文本整合,请求技术帮助。

原代码:

#include <iostream>
using namespace std;
void NumbertoCharacter(int n)
{
    int rev = 0, r = 0;

    while (n > 0) {

        r = n % 10;
        rev = rev * 10 + r;
        n = n / 10;
    }

    while (rev > 0) {
        r = rev % 10;

        switch (r) {
        case 1:
            cout << "one ";
            break;
        case 2:
            cout << "two ";
            break;
        case 3:
            cout << "three ";
            break;
        case 4:
            cout << "four ";
            break;
        case 5:
            cout << "five ";
            break;
        case 6:
            cout << "six ";
            break;
        case 7:
            cout << "seven ";
            break;
        case 8:
            cout << "eight ";
            break;
        case 9:
            cout << "nine ";
            break;
        case 0:
            cout << "zero ";
            break;
        default:
            cout << "invalid ";
            break;
        }
        rev = rev / 10;
    }
}

int main()
{
    int n;
    cin >> n;
    NumbertoCharacter(n);
    return 0;
}

解决方案

原程序的核心问题是只能处理单个整数输入,无法解析混合文本。下面是修改后的完整实现:

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

// 单个数字字符转英文单词
string digitToWord(char c) {
    switch(c) {
        case '0': return "zero";
        case '1': return "one";
        case '2': return "two";
        case '3': return "three";
        case '4': return "four";
        case '5': return "five";
        case '6': return "six";
        case '7': return "seven";
        case '8': return "eight";
        case '9': return "nine";
        default: return "";
    }
}

// 数字单词转空格分隔的英文单词字符串
string numberToWords(const string& numStr) {
    string result;
    for(char c : numStr) {
        if(!result.empty()) {
            result += " ";
        }
        result += digitToWord(c);
    }
    return result;
}

// 判断字符串是否全为数字
bool isNumber(const string& s) {
    for(char c : s) {
        if(!isdigit(c)) {
            return false;
        }
    }
    return !s.empty();
}

// 字符串转小写
string toLower(const string& s) {
    string result;
    for(char c : s) {
        result += tolower(c);
    }
    return result;
}

int main() {
    string word;
    bool firstOutput = true;
    
    // 按单词读取输入文本
    while(cin >> word) {
        if(!firstOutput) {
            cout << " ";
        }
        firstOutput = false;
        
        if(isNumber(word)) {
            // 如果是数字,转换为英文单词输出
            cout << numberToWords(word);
        } else {
            // 如果是普通文本,转小写输出
            cout << toLower(word);
        }
    }
    cout << endl;
    return 0;
}

关键修改说明

  • 按单词解析输入:使用cin >> word自动分割空格分隔的文本,逐个处理每个单词,解决了原程序只能读单个整数的问题。
  • 函数职责拆分:将数字转换逻辑拆分为单个字符转单词、数字字符串转单词序列两个函数,更灵活且便于整合文本。
  • 文本格式处理:添加了字符串转小写的函数,匹配示例中输出全小写的要求。
  • 整合输出逻辑:在主函数中判断每个单词类型,数字则转换后输出,普通文本直接转小写输出,实现原文本与转换内容的整合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26