Làm thế nào để sử dụng hàm string.substr ()?

Như được hiển thị ở đây , đối số thứ hai substrlà độ dài , không phải vị trí kết thúc:

string substr ( size_t pos = 0, size_t n = npos ) const;

Tạo chuỗi con

Trả về một đối tượng chuỗi với nội dung của nó được khởi tạo thành một chuỗi con của đối tượng hiện tại. Chuỗi con này là chuỗi ký tự bắt đầu từ vị trí ký tự posvà có độ dài nký tự.

Dòng của bạn b = a.substr(i,i+1);sẽ tạo ra, cho các giá trị i:

substr(0,1) = 1
substr(1,2) = 23
substr(2,3) = 345
substr(3,4) = 45  (since your string stops there).

Những gì bạn cần là b = a.substr(i,2);

Bạn cũng nên lưu ý rằng đầu ra của bạn sẽ trông buồn cười đối với một số như 12045. Bạn sẽ nhận được 12 20 4 45do thực tế là bạn đang sử dụng atoi()trên phần chuỗi và xuất ra số nguyên đó. Bạn có thể muốn thử chỉ outputing chuỗi riêng của mình mà sẽ có hai ký tự:

b = a.substr(i,2);
cout << b << " ";

Trên thực tế, toàn bộ điều có thể được viết đơn giản hơn là:

#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;
}