Я новичок в 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