Bài 1: Loại bỏ khoảng trắng ở đầu và cuối chuỗi
#include <iostream>
using namespace std;
char* xoaKhoangTrang(char* chuoi);
int main()
{
char s[1024]; // Khai báo mảng ký tự một chiều để lưu chuỗi
// Nhập một dòng ký tự, có thể chứa khoảng trắng
// Chuỗi nhập được lưu vào s, đọc tối đa 1024 ký tự, tự động thêm '\0' ở cuối
cin.getline(s, 1024);
cout << xoaKhoangTrang(s) << endl; // Xuất chuỗi sau khi loại bỏ khoảng trắng đầu và cuối
return 0;
}
// Hàm xoaKhoangTrang: loại bỏ khoảng trắng ở đầu và cuối chuỗi
// Tham số: chuoi - con trỏ ký tự, trỏ đến chuỗi đầu vào
// Giá trị trả về: con trỏ ký tự, trỏ đến chuỗi sau khi loại bỏ khoảng trắng (địa chỉ bắt đầu)
// Gợi ý: có thể thao tác trực tiếp trên chuỗi chuoi
char* xoaKhoangTrang(char* chuoi)
{
// Vui lòng thêm mã ở đây để triển khai hàm xoaKhoangTrang
/********** Bắt đầu *********/
if (chuoi == nullptr)
return chuoi;
// Loại bỏ khoảng trắng đầu chuỗi
char* batDau = chuoi;
while (*batDau == ' ')
batDau++;
// Loại bỏ khoảng trắng cuối chuỗi
char* ketThuc = batDau;
while (*ketThuc != '\0')
ketThuc++;
ketThuc--;
while (ketThuc >= batDau && *ketThuc == ' ')
ketThuc--;
// Điều chỉnh độ dài chuỗi và thêm '\0' ở cuối
*(ketThuc + 1) = '\0';
// Trả về địa chỉ bắt đầu chuỗi đã xử lý
return batDau;
/********** Kết thúc **********/
}
Bài 2: Lọc ra các chữ số trong chuỗi
#include <iostream>
using namespace std;
void locSo(char* chuoi);
int main()
{
char s[1024];
cin.getline(s, 1024); // Nhập một dòng ký tự
locSo(s); // Gọi hàm locSo, lọc ra các chữ số
cout << s << endl; // Xuất các chữ số đã lọc
return 0;
}
// Hàm locSo: lọc ra các chữ số trong chuỗi được trỏ bởi str và ghi lại vào str
// Tham số: str - con trỏ trỏ đến chuỗi
void locSo(char* chuoi)
{
// Vui lòng thêm mã ở đây để triển khai hàm locSo
/********** Bắt đầu *********/
char* p = chuoi, *q = chuoi;
int dauHieu = 1;
while (*q != '\0') {
if (*q == '-' && dauHieu) {
*p++ = *q++;
dauHieu = 0;
} else if (*q >= '0' && *q <= '9') {
dauHieu = 0;
*p++ = *q++;
} else {
q++;
}
}
*p = '\0';
/********** Kết thúc **********/
}
Bài 3: Đếm số lần xuất hiện của chuỗi con
#include <string.h>
#include <iostream>
using namespace std;
int demXuatHien(char* chuoiCon, char* chuoiLon);
int main()
{
char sub[128], str[1024];
cin.getline(sub, 128); // Nhập chuỗi con
cin.getline(str, 1024); // Nhập chuỗi dài
int n = demXuatHien(sub, str); // Gọi hàm demXuatHien, tính số lần xuất hiện của chuỗi con trong chuỗi dài
cout << n << endl; // Xuất số lần
return 0;
}
// Hàm demXuatHien: tính số lần xuất hiện của chuỗi con trong chuỗi dài
// Tham số: chuoiCon - con trỏ trỏ đến chuỗi con, chuoiLon - con trỏ trỏ đến chuỗi dài
// Giá trị trả về: số lần xuất hiện
int demXuatHien(char* chuoiCon, char* chuoiLon)
{
// Vui lòng thêm mã ở đây để triển khai hàm demXuatHien
/********** Bắt đầu *********/
int dem = 0;
char* viTri = chuoiLon;
while (*viTri != '\0') {
if (strstr(viTri, chuoiCon) != NULL) {
dem++;
viTri = strstr(viTri, chuoiCon);
viTri += strlen(chuoiCon);
} else {
viTri++;
}
}
return dem;
/********** Kết thúc **********/
}
Bài 4: Sao chép một phần chuỗi
#include <iostream>
using namespace std;
void saoChepPhanTu(char* nguon, int viTriBatDau, int soKyTu, char* dich);
int main()
{
char s[128], t[128];
int m, n;
cin >> s; // Nhập chuỗi nguồn
cin >> m >> n; // Nhập m và n
saoChepPhanTu(s, m, n, t); // Sao chép chuỗi
cout << t << endl; // Xuất kết quả sao chép
return 0;
}
// Hàm saoChepPhanTu: sao chép một phần chuỗi, sao chép n ký tự bắt đầu từ vị trí m của chuỗi được trỏ bởi s vào t
// Tham số: s - con trỏ trỏ đến chuỗi nguồn, t - con trỏ trỏ đến chuỗi đích, m - vị trí bắt đầu, n - số ký tự
// Giá trị trả về: không có
void saoChepPhanTu(char* nguon, int viTriBatDau, int soKyTu, char* dich)
{
// Vui lòng thêm mã ở đây để triển khai hàm saoChepPhanTu
/********** Bắt đầu *********/
char* p = nguon;
char* q = dich;
int i = 0;
p = p + viTriBatDau;
while (i < soKyTu) {
*q++ = *p++;
i++;
}
*q = '\0';
/********** Kết thúc **********/
}