У меня проблемы при преобразовании целочисленных составляющих в вектор целочисленного типа с помощью итератора обратного вектора - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в c ++, поэтому есть большая вероятность, что это глупый вопрос с простым решением, но я пытался исправить это часами.Весь код работает нормально по большей части, кроме самого конца, когда я использую итератор обратного вектора.Он выводит ноль в конце итерации (я знаю, что ноль находится в начале до итерации обратного вектора).В нижней части кода вы можете увидеть, что выводит эта программа.Предполагается, что в начале вектора должны быть нули, но в конце их быть не должно.Я заставил код распечатать целые числа, вставленные в вектор, чтобы доказать, что там не должно быть нуля.

#include <iostream>
#include <vector>
#include <cstdlib>
#include <chrono>
#include <algorithm>
#include <iomanip>
#include <cmath>

using namespace std;


int main() {

    srand(std::chrono::duration_cast<std::chrono::milliseconds>
         (std::chrono::system_clock::now().time_since_epoch()).count()%2000000000);

    int digits = 10;
    //unsigned int single;
    //int a;
    int enteredCode;
    unsigned int length;
    //int d;
    //int e;

    while(digits > 5 || digits == 2 || digits == 1 || digits <= -1){
    cout << "Enter number of digits in code (3, 4 or 5): ";
    cin >> digits;
    }

    srand(time(0));
        int vect_sz = digits;
        vector<int> vectorOne(vect_sz);
        for(unsigned int i =0; i < vectorOne.size(); ++i){
            int randNo = rand() % 10;
            while(std::count(vectorOne.begin(), vectorOne.end(), randNo)){
            randNo = rand() % 10;
            }
                        vectorOne.at(i) = randNo;
                        std::cout<< vectorOne.at(i)<<endl;
        }
        if (digits == 0) {
                    std::cout<< "Enter code: ";
                    cin>> enteredCode;
                    std::cout<< "Enter number of digits in code: ";
                    cin>> length;
                    int size = 0;
                    int variable;
                    variable = enteredCode;
                     while (variable != 0){
                        variable /= 10; size++;
                    }
                    int d = length - size;
                    //cout<<enteredCode * pow(10, d);

                    //std::cout<< setfill('0') << setw(length) << enteredCode<< endl;
                    //cout<<enteredCode << endl;
                    std::vector<int> vectorTwo;

                    while(enteredCode > 0){
                        vectorTwo.push_back(enteredCode%10);
                        cout<<enteredCode%10<< endl;
                        enteredCode/=10;

                    }
                    for(int i = 0; i < d; i++){
                     vectorTwo.push_back(0);
                                        }


                    std::reverse(vectorTwo.begin(), vectorTwo.end());
                    for (std::vector<int>::const_iterator i = vectorTwo.begin();i < vectorTwo.end(); ++i)
                               std::cout << *i << '-';
                      }




        int vecInteger = 0;
        for (auto w : vectorOne){
            vecInteger = vecInteger * 10 + w;
        }
        std::cout<< vecInteger;

    return 0;
}

Пример выполнения:

Enter code: 452
Enter number of digits in code: 5
2
5
4
0-0-4-5-2-0
...