3
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 6.5 năm trước bởi

Tại sao em chuyển sang c++ nó lại ko ra vậy ạ.

#include<iostream>
#include<string>
using namespace std;
void xoakhoangtrang(string& str)
{
    while (str[0] == ' ')
    {
        str.erase(str.begin() + 0);
    }
    while (str[str.length() - 1] == ' ')
    {
        str.erase(str.begin() + str.length()- 1);
    }
    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] == ' ' && str[i + 1] == ' ')
        {
            str.erase(str.begin() + i);
            i--;
        }
    }
    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] == ' '&& str[i+1]!=' ')
        {
            str[i+1] = str[i+1] - 32;
        }
    }
    str[0] = str[0] - 32;
}
string dao(string str)
{
    string S;
    int j = 0;
    int dem = 0;
    for (int i = str.length(); i >= 0; i--)
    {
        if (i == str.length() || i == (str.length() - 1))
        {
            continue;
        }
        dem++;
        if (str[i] == ' ')
        {
            for (int k = 0; k < i + dem; k++)
            {
                S[j] = str[k];
                j++;
            }
            S[j-1]=' ';
            dem=0;
        }

    }
    S[str.length() - 1] = '\0';
    return S;
}
int main()
{
    string str;
    getline(cin, str);
    xoakhoangtrang(str);
    string c = dao(str);
    cout << c;
}
Cộng đồng 28.07.2021
thêm bình luận...
0
Cộng đồng đã đăng:

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

thêm bình luận...
0
Cộng đồng đã đăng:

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++

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)