Viết chương trình đảo ngược từng từ của một chuỗi nhập vào?

Hôm nay em học C++ thì được đề bài như sau:
Viết chươgn trình đảo ngược từng từ của một chuỗi nhập vào.
Ví dụ: nhập I LOVE YOU => in ra: I EVOL UOY.
Em đã viết đoạn code như sau:

#include <iostream>
#include <string>
using namespace std;
int main(){
    string chuoi_nhap, chuoi_xuat;
    int sokitu,a(0);
    cout<< "Nhap vao chuoi bat ky: ";
    getline(cin,chuoi_nhap);
    sokitu=chuoi_nhap.length();
    cout << " So ky tu nhap vao la: " << sokitu << endl;
    cout << " ******" << endl;
    for(int i=0;i <sokitu;i++){
        for(int j = i; chuoi_nhap[j]!= ' ' ;j++){
            a++;
        }
        for(int k = a+i; k>=i;k--){
            cout << chuoi_nhap[k];
        }
        i = i+a;
        a = 0;
    }
    cout << endl;
    return 0;
}

thì khi em nhập vào I LOVE YOU ra kết quả như sau:

Cho em hỏi vì sao bị lỗi dãy số đó và làm sao khắc phục ạ?
Em xin cám ơn.

Lỗi của mình khác =))

Lỗi này bị ở Từ cuối cùng trong chuỗi nhập vào, nhưng chả hiểu vì sao :frowning:

Mình đoán là do đằng sau ký tự cuối cùng không có dấu cách nên nó báo string subscript out of range. Bạn thêm chuoi_nhap = chuoi_nhap + ' '; sau khi getline thì sẽ không bị lỗi nữa.
Và mình cũng nghĩ được 1 thuật toán đơn giản hơn cho bạn đó :slight_smile:

1 Like

:heart_eyes: cám ơn bạn, có thể cho mình xin thuật toán đó luôn được không bạn? :smiley:

Thử trình bày 1 thuật toán khác đi đã thì mình mới bày :smiley:

Có phải là tách chuỗi thành từng chuỗi nhỏ rồi in ngược chuỗi đó ko bạn? :smiley:

Uk, mình nghĩ làm thế đơn giản hơn mà?

1 Like

Thanks bạn gợi ý, mình sẽ làm thử luôn cách tách chuỗi luôn :blush:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?