Đảo ngược chuỗi trong C / C++
Trong bài viết này, codehow sẽ hướng dẫn các bạn cách đảo ngược chuỗi trong C / C++. Đây là dạng bài tập căn bản với chuỗi trong C / C++, vì vậy hãy luyện tập nó thật nhiều để sử dụng một cách thành thạo nhé.
Đảo ngược một chuỗi nghĩa là ta sẽ đảo thứ tự từ cuối đến đầu của một chuỗi.
Ví dụ: Mình có chuỗi "codehow.net" khi đảo ngược sẽ thành "ten.wohedoc".
Vậy làm thế nào để đảo ngược chuỗi trong C / C++? Có những cách nào thì hãy cùng mình bắt đầu ngay thôi nhé.
Đảo ngược chuỗi trong C / C++
Trong phần này, mình sẽ thực hiện viết chương trình đảo ngược chuỗi trong C / C++ không sử dụng hàm có sẵn. Nghĩa là mình sẽ tự định nghĩa hàm đảo ngược, chương trình được viết bằng hai ngôn ngữ khác nhau là C và C++.
Bước 1: Tạo hàm Length()
, hàm này có chức năng đếm độ dài của chuỗi.
int Length(char s[]) { int i = 0; while (s[i] != NULL) ++i; return i - 1; }
Bước 2: Tạo hàm DaoNguoc()
, hàm này có chức năng đảo ngược chuỗi được truyền vào.
char* DaoNguoc(char str[]) { int length = Length(str); char* temp = new char[length + 1]; for (int i = 0; i < length; i++) { temp[i] = str[length - 1 - i]; } temp[length] = NULL; //Kết thúc chuỗi return temp; }
Bước 3: Tạo hàm InDaoNguoc()
, hàm này có chức năng in chuỗi sau khi đã đảo ngược.
void InDaoNguoc(char str[]) { int length = Length(str); printf("\nChuoi sau khi dao nguoc la: "); for (int i = length - 1; i >= 0; i--) { printf("%c", str[i]); } }
Bước 4: Yêu cầu người dùng nhập vào chuỗi cần đảo ngược, sau đó gọi hai hàm DaoNguoc()
và InDaoNguoc()
để đảo ngược chuỗi và hiển thị ra màn hình.
char s[100]; printf("\nNhap chuoi can dao nguoc: "); fgets(s, 100, stdin); // nên dùng hàm fgets char* kq = DaoNguoc(s); InDaoNguoc(s);
Chương trình C:
#include <stdio.h> int Length(char s[]) { int i = 0; while (s[i] != NULL) ++i; return i - 1; } char* DaoNguoc(char str[]) { int length = Length(str); char* temp = new char[length + 1]; for (int i = 0; i < length; i++) { temp[i] = str[length - 1 - i]; } temp[length] = NULL; //Kết thúc chuỗi return temp; } void InDaoNguoc(char str[]) { int length = Length(str); printf("\nChuoi sau khi dao nguoc la: "); for (int i = length - 1; i >= 0; i--) { printf("%c", str[i]); } } int main() { char s[100]; printf("\nNhap chuoi can dao nguoc: "); fgets(s, 100, stdin); // nên dùng hàm fgets char* kq = DaoNguoc(s); InDaoNguoc(s); printf("\n---------------------------\n"); printf("Chuong trinh nay duoc dang tai codehow.net"); return 0; }
Kết quả:
Chương trình C++:
#include <iostream> using namespace std; int Length(char s[]) { int i = 0; while (s[i] != NULL) ++i; return i - 1; } char* DaoNguoc(char str[]) { int length = Length(str); char* temp = new char[length + 1]; for (int i = 0; i < length; i++) { temp[i] = str[length - 1 - i]; } temp[length] = NULL; //Kết thúc chuỗi return temp; } void InDaoNguoc(char str[]) { int length = Length(str); cout<<"\nChuoi sau khi dao nguoc la: "; for (int i = length - 1; i >= 0; i--) { cout<<str[i]; } } int main() { char s[100]; cout<<"\nNhap chuoi can dao nguoc: "; fgets(s, 100, stdin); // nên dùng hàm fgets char* kq = DaoNguoc(s); InDaoNguoc(s); cout<<"\n---------------------------\n"; cout<<"Chuong trinh nay duoc dang tai codehow.net"; return 0; }
Kết quả:
Đảo ngược chuỗi trong C / C++ sử dụng hàm đệ quy
Trong phần này, mình sẽ thực hiện chương trình đảo ngược chuỗi trong C / C++ sử dụng hàm đệ quy, các bạn có thể tham khảo nhé.
Chương trình C:
#include <stdio.h> #include <string.h> void reverse_string(char*, int, int); int main() { char string_array[150]; printf("Nhập vào một chuỗi: "); scanf("%s", &string_array); reverse_string(string_array, 0, strlen(string_array)-1); printf("Chuỗi sau khi đảo ngược là: %s",string_array); printf("\n-------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); } void reverse_string(char *x, int start, int end) { char ch; if (start >= end) return; ch = *(x+start); *(x+start) = *(x+end); *(x+end) = ch; reverse_string(x, ++start, --end); }
Kết quả:
Chương trình C++:
#include <iostream> #include <string.h> using namespace std; void reverse_string(char*, int, int); int main() { char string_array[150]; cout<<"Nhập vào một chuỗi: "; cin>>string_array; reverse_string(string_array, 0, strlen(string_array)-1); cout<<"Chuỗi sau khi đảo ngược là: "<<string_array; cout<<"\n-------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; } void reverse_string(char *x, int start, int end) { char ch; if (start >= end) return; ch = *(x+start); *(x+start) = *(x+end); *(x+end) = ch; reverse_string(x, ++start, --end); }
Kết quả:
Như vậy là chúng ta đã cùng nhau tìm hiểu về cách đảo ngược chuỗi trong C / C++. Các bạn có thể luyện tập nhiều dạng bài tập hơn tại serries bài tập C / C++ của codehow nhé. Cảm ơn các bạn rất nhiều.