c++ 如何将多个数字打印成单词

5vf7fwbs  于 2022-11-19  发布在  其他
关注(0)|答案(4)|浏览(139)

在我的代码中,我不明白为什么0不打印出来,我做了所有可能的解决方案,但是它不打印出来。

#include <iostream>
using namespace std;

int main(){
    int digits; 
    int numberOne = 0;
    int integer;
    
    cout<<"Enter the number: ";
    cin>>digits;
    while (digits != 0) {
        numberOne = (numberOne * 10) + (digits % 10);
        digits /= 10;
    }
    for (integer = numberOne; integer > 0; integer = integer / 10){
        switch (integer  % 10) {
            case 0:
                cout<<"Zero\n";
                break;
            case 1:
                cout<<"One\n";
                break;
            case 2:
                cout<<"Two\n";
                break;
            case 3:
                cout<<"Three\n";
                break;
            case 4:
                cout<<"Four\n";
                break;
            case 5:
                cout<<"Five\n";
                break;
            case 6:
                cout<<"Six\n";
                break;
            case 7:
                cout<<"Seven\n";
                break;
            case 8:
                cout<<"Eight\n";
                break;
            case 9:
                cout<<"Nine\n";
                break;
        }
    }
        return 0;
    }

零不打印如何修复?预期输出是900(九零零),但在我的情况下零不打印。帮助谢谢。

8dtrkrch

8dtrkrch1#

因为在这一行:

for (integer = numberOne; integer > 0; integer = integer / 10){

循环只在integer>0时继续。2因此你永远不会看到“零”。

zxlwwiss

zxlwwiss2#

为什么不打印零?看看你的循环

for (integer = numberOne; integer > 0; integer = integer / 10){

如果integer等于0,那么这个循环就永远不会进入。你需要在循环中更聪明一点。计数数字怎么样?

int num_digits = 0;
while (digits != 0) {
    numberOne = (numberOne * 10) + (digits % 10);
    digits /= 10;
    ++num_digits;
}

现在您已经有了位数,可以在第二个循环中使用它

for (integer = numberOne; num_digits > 0; integer = integer / 10, --num_digits) {
    ...
}

你仍然需要把零当作一种特殊情况,因为如果用户输入0,那么num_digits将等于零,你也不会打印任何东西。

hgncfbus

hgncfbus3#

#include <iostream>
using namespace std;

int main(){
    int digits; 
    int arrayLength = 10;  
    
    cout<<"Enter the number: ";
    cin>>digits;
    
    string reverse_number[arrayLength]; //array to store the string of numbers like "Zero"
    int array_counter=0;
    while (digits != 0) {
        switch (digits  % 10) {
            case 0:
                reverse_number[array_counter++] = "Zero";
                break;
            case 1:
                reverse_number[array_counter++] = "One";
                break;
            case 2:
                reverse_number[array_counter++] = "Two";
                break;
            case 3:
                reverse_number[array_counter++] = "Three";
                break;
            case 4:
                reverse_number[array_counter++] = "Four";
                break;
            case 5:
                reverse_number[array_counter++] = "Five";
                break;
            case 6:
                reverse_number[array_counter++] = "Six";
                break;
            case 7:
                reverse_number[array_counter++] = "Seven";
                break;
            case 8:
                reverse_number[array_counter++] = "Eight";
                break;
            case 9:
                reverse_number[array_counter++] = "Nine";
                break;
        }
        digits /=10;
    }
        int num_digits = array_counter;
        for (int i = 0; i < num_digits; i++) {
            cout << reverse_number[--array_counter] <<" ";
        }
        return 0;
    }

在转换900时,零没有显示的原因是,当你把900转换为009时,没有提到处理009中前导零的条件,它们被忽略了。要做到这一点,最好的方法是把它们存储在其他地方,比如字符串或数组中。你也可以在转换时直接把数字字存储到数组中。这样就不会丢失前导零。

cunj1qz1

cunj1qz14#

其他答案已经解决了代码的主要问题。
这个答案集中在帖子的标题上:如何将多个数字打印成单词?

  • 首先,我会考虑使用字符串数组而不是开关。

为了检索给定数字的字符串,只需对该数组进行索引。
(see digits[c - '0']以下)

  • 此外,如果允许您将数字转换为字符串,则代码将简化为遍历该字符串并将每个字符转换为单词。

您可以从标准输入中直接读取数字作为字符串,或者对整数使用std::to_string
另请注意,当从数字字串阅读字符c时,c - '0'会提供介于09之间的整数,您可以将它当做数组索引。
Demo

#include <array>
#include <iostream>
#include <string>  // to_string

std::array<std::string, 10> digits{
    "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
};

void digits_to_words(int n) {
    for (unsigned char c : std::to_string(n)) {
        std::cout << digits[c - '0'] << "\n";
    }
}

int main() {
    for (int n : { 0, 5, 105, 900 }) {
        std::cout << "Number: " << n << "\n";
        digits_to_words(n);
        std::cout << "\n";
    }
}

相关问题