Как показано здесь , вторым аргументом substr
является длина , а не конечная позиция:
string substr ( size_t pos = 0, size_t n = npos ) const;
Создать подстроку
Возвращает строковый объект с его содержимым, инициализированным подстрокой текущего объекта. Эта подстрока представляет собой последовательность символов, которая начинается с позиции символа pos
и имеет длину n
символов.
Ваша строка b = a.substr(i,i+1);
сгенерирует для значений i
:
substr(0,1) = 1
substr(1,2) = 23
substr(2,3) = 345
substr(3,4) = 45 (since your string stops there).
Что вам нужно, это b = a.substr(i,2);
Вы также должны знать, что ваш вывод будет выглядеть забавно для числа типа 12045. Вы получите 12 20 4 45
из-за того, что вы используете atoi()
в секции строк и выводите это целое число. Возможно, вы захотите просто вывести саму строку, длина которой будет : два символа:
b = a.substr(i,2);
cout << b << " ";
На самом деле все это можно было бы записать проще:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string a;
cin >> a;
for (int i = 0; i < a.size() - 1; i++)
cout << a.substr(i,2) << " ";
cout << endl;
return 0;
}