1
Làm thế nào để đảo ngược các từ của một câu trong C/C++?
3
ngocthuan11330 đã đăng:

Các bác cho em hỏi làm thế nào để đảo ngược các từ của một câu cho trước trong C/C++ với bài toán cụ thể sau:

Đầu vào: Toi dang hoc lap trinh C/C++

Đầu ra: C/C++ trinh lap hoc dang Toi

thêm bình luận...
3
Thành Trung40 đã đăng:

Cách viết của mình có hơi lằn nhằn nhưng bạn có thể xem thử nhé.

Ý tưởng của mình là:

  1. Khởi tạo một chuỗi ketQua có độ dài bằng chuỗi ban đầu (vì chúng ta chỉ đảo các từ trong chuỗi thôi nên độ dài của chuỗi ban đầu và chuỗi kết quả sẽ bằng nhau)
  2. Duyệt từng ký tự của chuỗi bắt đầu từ cuối chuỗi chạy về đầu chuỗi, bạn nên lưu ý ký tự \0 ở cuối chuỗi nhé, trong đoạn code của mình, khi gặp ký tự này mình thực hiện bỏ qua không làm gì cả.
  3. Vừa duyệt vừa đếm số lượng ký tự mình đã duyệt (mục đích để xác định chiều dài của một từ trong câu), theo ví dụ ở trên thì từ C/C++ có chiều dài bằng 4.
  4. Khi gặp ký tự khoảng trắng, thực hiện sao chép từ vừa mới được duyệt xong sang mảng ketQua.
  5. Xử lý thêm từ ở đầu câu nữa là xong.

Đoạn mã nguồn của mình:

#include <stdio.h>
#include <string.h>


char* daoNguocTuCoTrongChuoi(char *S){
    //1. Khởi tạo mảng ketQua
    char* ketQua = new char[strlen(S)];
    int j = 0;
    int dem = 0;

    //2. Duyệt từng ký tự bắt đầu từ cuối chuỗi
    for(int i = strlen(S); i >= 0; i--){
        if (i == strlen(S) || i == strlen(S)-1) //Xử lý ký tự '\0' bằng cách bỏ qua
            continue;

        //3. Đếm số lượng ký tự mình đi qua
        dem++;

        //4. Khi gặp khoảng trắng, thực hiện sao chép từ chuỗi qua mảng ketQua
        if (S[i] == ' '){
            for(int k = i; k < i+dem; k++){
                ketQua[j] = S[k+1];
                j++;
            }
            ketQua[j-1] = ' ';
            dem = 0;
        }

        //5. Xử lý từ ở đầu câu
        if (i == 0){
            for(int k = i; k < i+dem; k++){
                ketQua[j] = S[k];
                j++;
            }
        }

    }

    ketQua[strlen(S)-1] = '\0';

    return ketQua;
}

int main(){
    char S[300];

    printf("Nhap vao chuoi: ");
    fflush(stdin);
    fgets(S, 300, stdin);

    printf("Ket qua la: ");
    char* ketQua = daoNguocTuCoTrongChuoi(S);

    puts(ketQua);
}

Kết quả xuất ra màn hình:

Đảo ngược các từ của câu trong C/C++

đã bổ sung 3.2 năm trước bởi
thêm bình luận...

Câu trả lời của bạn

Chào mừng bạn đến với cộng đồng chia sẻ tri thức BanhoiTuidap.com, bạn có thể chia sẻ bất kỳ sự hiểu biết, nghiên cứu hoặc kinh nghiệm của mình về câu hỏi này với một số lưu ý:
  • Lịch sự, tế nhị.
  • Hạn chế ghi tắt, câu trả lời của bạn chỉ nên tập trung vào câu hỏi ở trên.
Câu trả lời của bạn sẽ được đăng ở chế độ cộng đồng, cho nên bạn sẽ không thể chỉnh sửa sau khi đăng, có thể đăng ký thành viên trên BanhoiTuidap.com khi bạn muốn theo dõi câu hỏi này hoặc chủ đề liên quan.
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)