如何用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
相关产品推荐
相关产品推荐

