LATEST

Đả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()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ả:

bai21 02 PNG

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ả:

bai21 01 PNG

Đả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ả:

bai21 04 PNG

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ả:

bai21 03 PNG

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.

Cùng chuyên mục:

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán tính lũy thừa trong C / C++

Thuật toán tính lũy thừa trong C / C++

Top