CS入门:如何实现1-35数字转英文拼写的C++代码?
完整实现代码
#include<iostream> #include<string> using std::cout; using std::cin; using std::endl; int main() { cout << "Input a number 1-35 for the days within Japril: "; int number; cin >> number; // 拦截非法输入,避免后续逻辑出错 if (number < 1 || number > 35) { cout << "Invalid input! Please enter a number between 1 and 35." << endl; return 1; } const int single = number %10; const int ten = number /10; // 0-9的英文映射,索引对应数字,0位留空适配1-9的情况 const std::string ones[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; // 10-19的特殊英文,索引0对应10,依次到索引9对应19 const std::string teens[] = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; // 20、30的十位英文,索引2对应20,3对应30 const std::string tens[] = {"", "", "twenty", "thirty"}; std::string result; // 分三类情况处理数字 if (ten == 0) { // 1-9:直接取个位对应的英文 result = ones[single]; } else if (ten == 1) { // 10-19:直接取teens数组里的对应值 result = teens[single]; } else { // 20-35:先拼接十位英文,个位非0时追加连字符和个位英文 result = tens[ten]; if (single != 0) { result += "-" + ones[single]; } } cout << "The written form is: " << result << endl; return 0; }
关键部分说明
1. 输入合法性检查
加这一步是为了防止用户输入1-35之外的数字,避免后续数组索引越界或者输出错误结果,这是写程序时的基本习惯。
2. 字符串数组的作用
用数组做数字到英文的直接映射,是你当前阶段最容易理解和实现的方式:
ones数组:索引和数字一一对应,比如ones[5]就是"five",0位留空是因为我们处理的数字从1开始,十位为0时直接用个位索引取值。teens数组:因为10-19的英文没有规律,不能拆成十位+个位,所以单独把这些特殊值存起来,用个位数字做索引直接取。tens数组:只存20、30的十位部分,索引和十位数字对应(比如十位是2,取tens[2]即"twenty")。
3. 分情况逻辑
把数字分成三类处理,完全对应你拆分的ten和single变量:
- 十位为0:就是1-9的数字,直接取个位的英文。
- 十位为1:就是10-19的数字,直接取特殊映射的英文。
- 十位为2或3:先取十位的英文,个位不是0的话,加上连字符和个位英文(比如35变成"thirty-five")。
内容的提问来源于stack exchange,提问作者Vamp
相关产品推荐
相关产品推荐

