在C ++中迭代向量后输出错误

时间:2017-10-23 21:38:17

标签: c++

我想创建程序,将数字转换为由单词写的数字。

示例:n = 1321 - >输出:“一” - “三” - “二” - “一”

这是我的代码:

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int digits(int number){
    int digits = 0;
    while (number != 0){number /= 10; digits++;}
    return digits;
    }


int main(){
    int num,remainder,i;
    int digits(int);
    vector<string> num_str = {"zero","one","two","three","four","five","six","seven","eight","nine"};
    cin >> num;
    int length = digits(num);
    vector<int> num_int(length);
    while(num > 0){
        remainder = num % 10;
        num_int.push_back(remainder);
        num /= 10;
    }
    for(i = 0;i<num_int.size();++i){
        if(i == (num_int.size() - 1)){
            cout << num_str[num_int[i]];
        }else{
            cout << num_str[num_int[i]] <<"-";
        }

    }
    return 0;
}

例如我输入:43,我得到输出:“零 - 零 - 四 - 三”。 并且“零”的数量总是等于数字的位数。 我该如何解决?

1 个答案:

答案 0 :(得分:0)

是否必须按照您的方式进行'数字'提取,或者您只想将数字打印为字符串?

#include <iostream>
#include <string>

int main()
{
    std::string const nums[10] = { "zero","one","two","three","four","five","six","seven","eight","nine" };

    long long num;
    std::cin >> num;

    std::string const numStr = std::to_string(num);

    for (size_t i = 0; i < numStr.length(); ++i)
        std::cout << (i > 0 ? "-" : "") << "\"" << nums[numStr[i] - 48] << "\"";

    std::cout << std::endl;

    return 0;
 }