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
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
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à:
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)\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ả.C/C++
có chiều dài bằng 4.ketQua
.Đ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:
Bằng cách sử dụng vòng lặp while để lấy ra từng ký tự và so sánh chúng với nhau, chúng ta có thể tiến hành đảo ngược ký tự trong chuỗi C theo thứ tự trong bảng chữ cái.
Để so sánh các ký tự với nhau, chúng ta có thể sử dụng tới toán tử so sánh, hoặc là hàm strcmp() chẳng hạn.
Link tham khảo: Đảo ngược chuỗi trong C
Tương tự như ngôn ngữ C thì trong C++, bằng cách sử dụng vòng lặp while để lấy ra từng ký tự và so sánh chúng với nhau, chúng ta có thể tiến hành đảo ngược thứ tự các từ trong chuỗi C++ theo thứ tự trong bảng chữ cái.
Link tham khảo: Đảo ngược chuỗi trong C++