Я не был уверен, нужна ли вам обратная вставка или прямая, так что следующая демонстрация делает оба.Выберите свой выбор.
Идея проста.Для обратной вставки необходимо создать итератор i
, который инициализируется как Max_Digits-1
и уменьшается как итератор, который проходит через строковые приращения.Для прямой вставки вам нужно получить длину строки с помощью std::string::length()
и присвоить значение с помощью Max_Digits-(strLen-i)
.Функция std::string::length()
будет пересчитывать длину строки при каждом вызове.Нет необходимости платить за эту стоимость, поэтому можно также сохранить ее в переменной.
#include <iostream>
#include <string>
int main()
{
std::string value1 = "";
std::cout<< "Enter a number up to 20 ints long >> ";
std::cin >> value1;
std::cout<<std::endl<< "Entered string: " << value1 <<std::endl;
constexpr int Max_Digits = 20;
int backwards[Max_Digits] = {0};
int bck_itr = Max_Digits-1;
for(int i=0; value1[i]!='\0'; ++i, --bck_itr)
backwards[bck_itr] = value1[i] - '0';
std::cout<< "Backwards ints: ";
for (int i=0; i<Max_Digits; ++i)
std::cout<< backwards[i] <<",";
std::cout<<std::endl;
int forward[Max_Digits] = {0};
int strLen = value1.length();
for(int i=0; value1[i]!='\0'; ++i)
forward[Max_Digits-(strLen-i)] = value1[i] - '0';
std::cout<< "Forward ints: ";
for (int i=0; i<Max_Digits; ++i)
std::cout<< forward[i] <<",";
std::cout<<std::endl;
}
Для ввода:
12345678
Результат:
Enter a number up to 20 ints long >>
Entered string: 12345678
Backwards ints: 0,0,0,0,0,0,0,0,0,0,0,0,8,7,6,5,4,3,2,1,
Forward ints: 0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,
Пример: https://rextester.com/MDTL51590
пс.если вы не знаете, что такое constexpr
, то в этом случае просто считайте его усиленным const
.