[C++] Tìm kiếm và thay thế ký tự trong chuỗi

Tìm ký tự trong chuỗi c++ là một thuật toán cơ bản giúp cải thiện tính đồng nhất, sửa lỗi và thay đổi tên biến một cách nhanh chóng dễ dàng. Trong bài viết này, chúng ta sẽ tìm hiểu về cách thực hiện tìm kiếm và thay thế ký tự, chuỗi con, cũng như cách kiểm tra và thao tác với các ký tự, chuỗi trong ngôn ngữ lập trình C++. Bắt đầu thôi!

Xem thêm:

tách chuỗi trong c++

số nguyên tố cùng nhau

tính tổng các phần tử trong mảng 2 chiều c++

1. Bài toán tìm kiếm và thay thế chuỗi

Bài 25 (TH-CSLT-02): Viết chương trình nhập vào một chuỗi ký tự. Yêu cầu:

  • Cho biết các vị trí xuất hiện của ký tự x trong chuỗi ký tự vừa nhập. Với ký tự x được nhập từ bàn phím
  • Thay thế ký tự x trong chuỗi bằng ký tự y. Với ký tự x, y được nhập từ bàn phím

2. Các thao tác trên chuỗi trong C++

2.1. Kiểm tra ký tự trong chuỗi

Trong C++, bạn có thể sử dụng vòng lặp hoặc các hàm thư viện để kiểm tra xem một ký tự cụ thể có tồn tại trong chuỗi hay không. Ví dụ:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string str;
    char x;
    bool found = false;

    cout << "Nhap chuoi: ";
    getline(cin, str);

    cout << "Nhap ky tu can kiem tra: ";
    cin >> x;

    // Duyệt từng ký tự trong chuỗi để tìm ký tự x
    for (int i = 0; i < str.length(); i++) {
        if (str[i] == x) {
            cout << "Ky tu '" << x << "' ton tai trong chuoi tai vi tri: " << i << endl;
            found = true;
            break; // Dừng ngay khi tìm thấy
        }
    }

    if (!found) {
        cout << "Ky tu '" << x << "' khong ton tai trong chuoi." << endl;
    }

    return 0;
}

2.2. Tìm chuỗi trong chuỗi

#include <iostream>
#include <string>

using namespace std;

int main() {
    // Khai báo chuỗi chính và chuỗi con
    string str, sub;

    // Nhập chuỗi chính từ người dùng
    cout << "Nhap chuoi chinh: ";
    getline(cin, str);

    // Nhập chuỗi con cần tìm từ người dùng
    cout << "Nhap chuoi con can tim: ";
    getline(cin, sub);

    // Tìm chuỗi con trong chuỗi chính
    bool found = false; // Biến cờ để kiểm tra tìm thấy hay không
    int position = -1;  // Vị trí xuất hiện của chuỗi con

    for (int i = 0; i <= str.length() - sub.length(); i++) {
        // So sánh từng đoạn con trong chuỗi chính với chuỗi con
        if (str.substr(i, sub.length()) == sub) {
            found = true;
            position = i;
            break; // Thoát vòng lặp ngay khi tìm thấy
        }
    }

    // Kiểm tra kết quả
    if (found) {
        cout << "Chuoi con '" << sub << "' xuat hien tai vi tri: " << position << endl;
    } else {
        cout << "Khong tim thay chuoi con '" << sub << "' trong chuoi." << endl;
    }

    return 0;
}

2.3. Tìm ký tự trong chuỗi

Sử dụng vòng lặp hoặc hàm find() để tìm vị trí của ký tự đầu tiên xuất hiện trong chuỗi.

Ví dụ:

size_t found = str.find('a'); // Tìm ký tự 'a' đầu tiên trong chuỗi

2.4. Hàm tìm chuỗi trong chuỗi trong c++

Dưới đây là một hàm thực hiện việc tìm kiếm chuỗi con trong chuỗi:

bool findSubstring(string str, string sub) {
    return (str.find(sub) != string::npos);
}

2.5. Tìm chuỗi con trong c++

Tìm chuỗi con không chỉ giúp xác định chuỗi con có tồn tại hay không mà còn giúp thao tác với chuỗi như cắt chuỗi hoặc thay thế. Ví dụ:

string newStr = str.substr(position, length); // Cắt chuỗi con từ vị trí `position` với độ dài `length`.

3. Thuật toán tìm kiếm và thay thế trong chuỗi

3.1. Tìm kiếm trong chuỗi ký tự

Chúng ta có thể sử dụng vòng lặp để duyệt qua chuỗi và tìm các vị trí ký tự xuất hiện:

  • Khai báo biến: char str[100], x, y; int redflag; Khai báo một mảng ký tự str có kích thước 100, hai biến ký tự xy, và một biến nguyên redflag.
  • cout<<"Nhap chuoi: "; cin>>str; Yêu cầu người dùng nhập chuỗi ký tự từ bàn phím và lưu trữ vào biến str.
  • cout<<"Nhap ky tu x can tim: "; cin>>x; Yêu cầu người dùng nhập ký tự cần tìm kiếm x từ bàn phím.
  • for(int i=0;i<sizeof(str); i++){...} Sử dụng vòng lặp for để duyệt qua từng phần tử trong chuỗi str. Nếu phần tử hiện tại là ký tự x, biến redflag được đặt bằng 1 và vị trí của x được in ra màn hình.
  • if(redflag==0){cout<<"Khong tim thay";} Nếu biến redflag không bằng 1, tức là không tìm thấy ký tự x, thông báo “Không tìm thấy” được in ra màn hình.
for (int i = 0; i < str.length(); i++) {
    if (str[i] == x) {
        cout << "Tim thay " << x << " tai vi tri " << i << endl;
    }
}

3.2. Thay thế ký tự trong chuỗi

Khi tìm được ký tự cần thay thế, sử dụng vòng lặp để cập nhật chuỗi:

  • if(redflag==1){cout<<"Nhap ky tu y: "; cin>>y; for(int i=0;i<sizeof(str);i++){...}} Nếu biến redflag bằng 1, tức là tìm thấy ký tự x, yêu cầu người dùng nhập ký tự thay thế y từ bàn phím và sử dụng vòng lặp for để duyệt qua từng phần tử trong chuỗi str và thay thế ký tự x bằng ký tự y.
  • cout<<"Chuoi sau khi thay the: "<<str; In ra chuỗi ký tự sau khi đã thay thế ký tự x bằng ký tự y.

Lưu ý rằng đoạn code này chỉ hoạt động cho các chuỗi ký tự có độ dài nhỏ hơn hoặc bằng 100 vì kích thước của mảng str được khai báo là 100.

for (int i = 0; i < str.length(); i++) {
    if (str[i] == x) {
        str[i] = y;
    }
}

4. Code hoàn chỉnh

Dưới đây là đoạn mã hoàn chỉnh bao gồm các tính năng kiểm tra, tìm kiếm và thay thế:

#include<iomanip>
#include<iostream>

using namespace std;

int main(){
    char str[100], x, y;
    int redflag;

    cout<<"Nhap chuoi: "; cin>>str;

    cout<<"Nhap ky tu x can tim: "; cin>>x;

    //tim kiem phan tu x
    for(int i=0;i<sizeof(str); i++){
        if(str[i]==x){
            redflag=1;
            cout<<"Tim thay "<<x<<"tai vi tri "<<i<<endl;
        }
    }

    //hien ra man hinh vi tri
    if(redflag==0){
        cout<<"Khong tim thay";
    }

    //thay the phan tu x

    if(redflag==1){
        cout<<"Nhap ky tu y: "; cin>>y;
        for(int i=0;i<sizeof(str);i++){
            if(str[i]==x){
                str[i]=y;
            }
        }
        cout<<"Chuoi sau khi thay the: "<<str;
    }

}

5. Kết quả chạy chương trình

Tìm kiếm và thay thế chuỗi ký tự

Trên đây là đoạn mã tìm kiếm và thay thế kí tự trong chuỗi ngôn ngữ lập trình C++. Cảm ơn các bạn đã theo dõi trên ttnguyen.net.

Tải full bài tập thực hành C/C++ có lời giải:

Bài viết cùng chủ đề:

tính tổng các phần tử trong mảng c++

xoá phần tử trong mảng c++

thuật toán prim

thuật toán kruskal c++

kiểm tra số chính phương c++

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em