Đảo ngược chuỗi trong C | Laptrinhcanban.com

HOME › >>

Đảo ngược chuỗi trong C

Trong ngôn ngữ lập trình C, việc đảo ngược chuỗi là một phần quan trọng của việc xử lý dữ liệu. Kỹ thuật này cho phép bạn thay đổi thứ tự của các ký tự trong một chuỗi văn bản. Trong bài viết này, chúng ta sẽ tìm hiểu cách đảo ngược chuỗi trong ngôn ngữ C và các kỹ thuật và hàm hỗ trợ để thực hiện nhiệm vụ này.

Đảo Ngược Chuỗi Bằng Vòng Lặp

Một trong những cách đơn giản nhất để đảo ngược chuỗi trong C là sử dụng vòng lặp để thực hiện việc này bằng cách hoán đổi vị trí của các ký tự. Dưới đây là một ví dụ:

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

void daoNguocChuoi(char *chuoi) {
int i, j;
char temp;
int doDai = strlen(chuoi);

for (i = 0, j = doDai - 1; i < j; i++, j--) {
temp = chuoi[i];
chuoi[i] = chuoi[j];
chuoi[j] = temp;
}
}

int main() {
char chuoi[] = "Hello, World!";
daoNguocChuoi(chuoi);

printf("Chuỗi sau khi đảo ngược: %s\n", chuoi);
return 0;
}

//Chuỗi sau khi đảo ngược: !dlroW ,olleH

Trong ví dụ này, chúng ta đã viết một hàm daoNguocChuoi để đảo ngược chuỗi. Hàm này sử dụng một vòng lặp for để hoán đổi vị trí của các ký tự từ đầu và cuối chuỗi cho đến khi gặp nhau ở giữa. Kết quả là chuỗi “Hello, World!” sau khi đảo ngược thành “!dlroW ,olleH”.

Đảo Ngược Chuỗi Sử Dụng Đệ Quy

Một cách khác để đảo ngược chuỗi là sử dụng đệ quy. Để thực hiện việc này, bạn có thể viết một hàm đệ quy để đảo ngược một phần của chuỗi và sau đó kết hợp kết quả. Dưới đây là một ví dụ:

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

void daoNguocPhanChuoi(char *chuoi, int left, int right) {
if (left >= right) {
return; // Điều kiện dừng đệ quy
}

// Hoán đổi ký tự ở vị trí left và right
char temp = chuoi[left];
chuoi[left] = chuoi[right];
chuoi[right] = temp;

// Đệ quy đảo ngược phần còn lại của chuỗi
daoNguocPhanChuoi(chuoi, left + 1, right - 1);
}

int main() {
char chuoi[] = "Hello, World!";
int doDai = strlen(chuoi);
daoNguocPhanChuoi(chuoi, 0, doDai - 1);

printf("Chuỗi sau khi đảo ngược: %s\n", chuoi);
return 0;
}

//Chuỗi sau khi đảo ngược: !dlroW ,olleH

Trong ví dụ này, hàm daoNguocPhanChuoi được gọi đệ quy để đảo ngược một phần của chuỗi bằng cách hoán đổi ký tự ở vị trí leftright. Đệ quy tiếp tục cho đến khi left không còn nhỏ hơn right, tức là ta đã đảo ngược toàn bộ chuỗi.

Sử Dụng Hàm Thư Viện strrev

Trong thư viện chuẩn của ngôn ngữ C, không có hàm strrev để đảo ngược chuỗi một cách trực tiếp. Tuy nhiên, nếu bạn muốn sử dụng một hàm có sẵn, bạn có thể viết mã tự định nghĩa. Dưới đây là một ví dụ về việc viết hàm strrev tự định nghĩa:

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

void strrev_custom(char *chuoi) {
int i, j;
int doDai = strlen(chuoi);
char temp;

for (i = 0, j = doDai - 1; i < j; i++, j--) {
temp = chuoi[i];
chuoi[i] = chuoi[j];
chuoi[j] = temp;
}
}

int main() {
char chuoi[] = "Hello, World!";
strrev_custom(chuoi);

printf("Chuỗi sau khi đảo ngược: %s\n", chuoi);
return 0;
}

//Chuỗi sau khi đảo ngược: !dlroW ,olleH

Trong ví dụ này, chúng ta đã định nghĩa hàm strrev_custom để đảo ngược chuỗi một cách tương tự như trong ví dụ đầu tiên.

Đảo Ngược Chuỗi Unicode

Khi bạn cần đảo ngược một chuỗi Unicode (có các ký tự đặc biệt), bạn cần xem xét sử dụng thư viện hỗ trợ đa ngôn ngữ và kỹ thuật mã hóa. Một số thư viện như ICU (International Components for Unicode) cung cấp các hàm và công cụ cho việc xử lý chuỗi Unicode một cách đầy đủ và an toàn.

Tổng kết

Việc đảo ngược chuỗi là một phần quan trọng của việc xử lý dữ liệu trong lập trình C. Bạn có thể thực hiện việc này bằng cách sử dụng vòng lặp hoặc đệ quy để hoán đổi vị trí của các ký tự trong chuỗi. Đảm bảo kiểm tra giới hạn bộ nhớ và xử lý các trường hợp đặc biệt để đảm bảo tính an toàn và đáng tin cậy của mã của bạn.

URL Link

https://laptrinhcanban.com/c/lap-trinh-c-co-ban/chuoi-string-trong-c/dao-nguoc-chuoi-trong-c/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.