You are on page 1of 15

C++

Một số hàm phổ biết xử lý xâu trong c++

• Getline(cin,s): nhập xâu bao gồm cả khoảng trắng


• S.length(): đếm số lượng phần tử trong xâu S
• S.find(s1): tìm vị trí xuất hiện đầu tiên của xâu s1 trong xâu S

• S.erase(x,y): xóa y ký tự trong xâu S bắt đầu từ vị trí x S.insert(x,s1): chèn xâu s1 vào xâu S tại
vị trí x
Một số bài tập cơ bản minh họa các hàm và cách xử lý xâu
Bài 1: Nhập vào một xâu ký tự, đếm xem xâu đó có bao nhiêu ký tự ‘A’.
#include <bits/stdc++.h>
using namespace std; int
main()
{
string s;
int dem=0;
getline(cin,s);
for(int i=0;i<s.length();i++)
if(s[i]=='A') dem++;
cout<<dem;
}
Bài 2: Nhập vào 1 xâu ký tự, Tìm xem có từ “An” hay không? Nếu có thay thế từ “An” thành từ
“Nam”.
Ví dụ: “Hom nay An di hoc, An khong hoc bai do do An cam thay rat lo lang”.
Xâu sau khi chuyển đổi: “Hom nay Nam di hoc, Nam khong hoc bai do do Nam cam thay rat lo lang”.
#include <bits/stdc++.h>
using namespace std; int
main()
{
string s0,s1,s2;
getline(cin,s0);
s1="An"; s2="Nam";
int a=s0.find(s1);
while(a>=0)
{
s0.erase(a,2);
s0.insert(a,s2);
a=s0.find(s1);
}
cout<<s0;}
Chú ý: Do tính chất của code chỉ mang tính minh họa các hàm một các đơn giản nhất, để tránh trường
hợp phức tạp hóa vấn đề. do đó chưa xử lý các trường hợp đặc biệt, ví dụ các trường hợp không phải
là một từ mà là một cụm từ như Annnn.
Bài 3: Chuẩn hóa văn bản.
Theo quy tắc soạn thảo văn bản, mỗi từ chỉ cách nhau duy nhất một khoảng trắng. Hãy viết chương
trình nhập vào một xâu ký tự sau đó xóa hết khoảng trắng dư.
#include <bits/stdc++.h>
using namespace std; int
main()
{
string s;
getline(cin,s);
while(s[0]==' ') s.erase(0,1); //xoa khoang trang dau xau
while(s[s.length()-1]==' ')
s.erase(s.length()-1,1);
// xoa khoang trang cuoi xau
int t=s.find(" ");
while(t>=0)
{
s.erase(t,1);
t=s.find(" ");
}
cout<<s;
}

Bài 4: Nhập vào 1 xâu tính tổng các các ký tự số trong xâu.
Ví dụ: xâu = “123 aaa12 bb24” vậy tổng = 1+2+3+1+2+2+4=15
using namespace std; int main()
{
string s;
getline(cin,s); int
tong=0;
for(int i=0; i<s.length();i++)
if(s[i]<='9'&&s[i]>='0')
}
Chú ý: Với bài toán đổi ký tự thường thành ký tự hoa hoặc ngược lại thì chúng s[i] +-32.
Bài 5: Viết chương trình nhập vào 1 xâu kiểm tra xuâu đó có đối xứng hay không?
Ví dụ: xâu = “AABBAA” là xâu đối xứng.
using namespace std; int
main()
{
string s,s1;
getline(cin,s);
s1="";
for(int i=s.length()-1;i>=0;i--) s1=s1+s[i]; if(s==s1)cout<<"xau
doi xung";
else cout<<"xau khong doi xung"; }
Bài 6: Nhập vào họ tên của một học sinh sau đó cho biết họ, tên, tên lót.
Ví dụ nhập: Nguyen Van An
Ho la: Nguyen
Ten lot: Van Ten:
An
#include <bits/stdc++.h>
using namespace std; int
main() {
string s0,s1="",s2="",s3="";
getline(cin,s0); int i=0, j=s0.length()-
1; while(s0[i]!=' ')i++; while(s0[j]!='
')j--; for(int k=0;k<i;k++)s1=s1+s0[k];
for(int k=i+1;k<j;k++)s2=s2+s0[k]; for(int
k=j+1;k<s0.length();k++)s3=s3+s0[k];
cout<<"Ho: "<<s1<<"\n";
cout<<"Ten lot: "<<s2<<"\n";
cout<<"Ten: "<<s3;
}

PHẦN BÀI TẬP


FILE: BAI1.* : Nhập xâu S1, tạo xâu S2 gồm tất cả các chữ số của xâu S1
BAI1.INP BAI1.OUT

DFASFIOP3240FDJSKHFJ43549dhsajfgd543875890,.,.m,5849 3240435495438758905849

FILE: BAI2.* :Nhập xâu S1, tạo xâu S2 gồm tất cả các chữ cái của xâu S1
BAI2.INP BAI2.OUT

DFASFIOP3240FDJSKHFJ43549dhsajfgd543875890,.,.m,5849 DFASFIOPFDJSKHFJdhsajfgdm

FILE: BAI3.*: Nhập xâu S. Tìm ra có bao nhiêu chữ cái, bao nhiêu chữ số.
BAI3.INP BAI3.OUT

DFASFIOP3240FDJSKHFJ43549dhsajfgd543875890,.,.m,5849 25 22

FILE: BAI4.*: Nhập vào xâu S1, chuyển đổi chữ hoa thành chữ thường
BAI4.INP BAI4.OUT

fdhsHHHHHsadkfdsh4982375873HHHH fdhshhhhhsadkfdsh4982375873hhhh

FILE: BAI5.*: Nhâp vào xâu S, chuyển đổi chữ thường thành chữ hoa
BAI5.INP BAI5.OUT

abcdef ABCDEF

FILE: BAI6.*: Nhập vào xâu S. Chuyển kí tự đầu của mỗi từ trong xâu thành chữ
hoa
BAI6.INP BAI6.OUT

tran le van khanh Tran Le Van Khanh

FILE: BAI7.*: Xóa hết khoảng trắng


BAI7.INP BAI7.OUT

Tran le van khanh Tranlevankhanh

FILE: BAI8.*: Xóa hết kí tự trắng thừa trong xâu


BAI8.INP BAI8.OUT

Tran le van khanh Tran le van khanh

FILE: BAI9.*: Xóa hết chữ số trong xâu


BAI9.INP BAI9.OUT

Tran 19 Quoc 75 Khanh Tran Quoc Khanh

FILE: BAI10.*: Xóa hết chữ cái có trong xâu


BAI10.INP BAI10.OUT

Tran 19 Quoc 75 Khanh 1975


FILE: BAI12.*: Nhập vào xâu. In ra xâu đảo theo từ
BAI12.INP BAI12.OUT

tran le van khanh khanh van le tran

FILE: BAI13.*: Đếm số lần xuất hiện của các kí tự trong xâu.
BAI13.INP BAI13.OUT

aaaaaaaaaaaaaaaaaaaaaaaaaaaab a 28

b1

FILE: BAI14.*: In xâu S1 xuất hiện bao nhiêu lần trong xâu S2
BAI14.INP BAI14.OUT

aa 3

saafgaaytaaff

FILE: BAI15.*: Đếm số từ trong xâu


BAI15.INP BAI15.OUT

nguyen van a 3

FILE: BAI16.*: Xóa hết kí tự trùng nhau trong xâu


BAI16.INP BAI16.OUT

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab b

FILE: BAI17.*:Nhập xâu St. Xóa một kí tự được nhập từ bàn phím.
BAI17.INP BAI17.OUT

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a

FILE: BAI18.*: Nhập xâu S. Nhập kí tự k. Đếm số lần xuất hiện của k
BAI18.INP BAI18.OUT

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab 1

FILE: BAI19.*: Xâu đối xứng


BAI19.INP BAI19.OUT

454654654 NO

123321 YES

FILE: BAI21.*:: Đếm xem trong xâu có bao nhiêu số nguyên âm


BAI19.INP BAI19.OUT

ad-45465dddf-4fdsf654 2
FILE: NENXAU.*

FILE: PWORD.*
FILE: TRIEUPHU.*

FILE: TEEN.*
FILE: GIAIMA.*
FILE: PNM.*

FILE: CAU3.*
FILE: CAU3_1.*

FILE: CAU3_2.*
Câu 3: Trò chơi tìm số

An chọn ra một số nguyên tố p (p < 100) và đem dấu vào một xâu kí tự St sao cho p là số nguyên tố lớn nhất
trong dãy các số nguyên tố được tạo từ các xâu con của St (xâu con của một xâu kí tự St là một dãy lien tiếp các
kí tự trong St). An cho Bình biết xâu St và đố Bình tìm được số nguyên tố p mà An đã chọn.
Chẳng hạn, An chọn số p = 23 và dấu vào xâu St = ‘tesst1234#password5426’
Yêu cầu: Hãy giúp Bình tìm số nguyên tố p
Dữ liệu: Vào từ file văn bản BAI3.INP gồm một dòng chứa xâu St có độ dài không quá 255 kí tự. Kết quả:
Ghi ra file văn bản BAI3.OUT số nguyên tố p tìm được.
Ví dụ:
BAI3.INP BAI3.OUT Giải thích
tesst1234#password5426 23 Khi biết xâu St, Bình sẽ tìm được số p = 23 vì trong tất cả các
xâu con của St chỉ có các số nguyên tố là 2, 3, 23, 5.

FILE: CAU3_3.*

Câu 3: Thu gọn số (6 điểm


Cho số nguyên dương N, người ta tạo ra số nguyên M bằng cách viết liên tiếp
nhau các số nguyên từ 1 đến N. Ví dụ, với N 13 , ta có M 12345678910111213 .
Người ta tiến hành thu gọn M bằng cách: Trong số M lần lượt xoá tất cả các chữ số
ở vị trí chẵn thu được số M1 , sau đó trong Ml ta lại xoá tất cả các chữ số ở vị trí lẻ
thu được số M2, rồi lại xoá tất cả các chữ số ở vị trí chẵn trong M2, . . . cho đến khi
chỉ còn lại một chữ số.
M=l 2345678910111213 → Ml =135790123 → M2 =3702 → M3 = 30 → M4 =0
Yêu cầu: Cho số nguyên dương N (1 < N < l06). Hãy xác định chữ số còn lại sau quá
trình thu gọn số M tương ứng.
Nhập vào từ bàn phím một số nguyên dương N.
Xuất ra màn hình chữ số còn lại sau quá trình thu gọn số M. Ví dụ:

Nhập N=4
Kết quả ra màn hình Giải thích
3 Với N=4, ta có số M = 1234, lần lượt thu gọn M như sau:
M = 1234 → M1 = 13 → M2 = 3
FILE: CAU3_4.*

FILE: CAU3_5.*
Câu 3: Xóa số
Hãng cung cấp dịch vụ điện thoại XYZ khuyến khích nhiều người đăng ký thuê bao bằng cách: Khi khách hàng
đến đăng ký thuê bao thì sẽ được cấp hai số may mắn là số nguyên dương n và k, hãng sẽ khuyến mại người
đó một số tiền là số nhận được từ số n sau khi xóa đi đúng k chữ số (k nhỏ hơn số chữ số của n).

Minh vừa mới đăng ký thuê bao của hãng và được cung cấp hai số n và k, em hãy giúp Minh
xóa đi k chữ số của số n để số nhận được là lớn nhất.

Nhập vào: input.inp hai số nguyên dương n (n ≤109) và k mỗi số trên một dòng.

Xuất ra: Output.inp số lớn nhất nhận được sau khi xóa đi đúng k chữ số của n.

Ví dụ:
Nhập n = 58816 và k = 2

Output.inp Giải thích

886 Trong số 58816 xóa đi chữ số 5 và chữ số 1 đề nhận được số lớn


nhất là số 886
FILE: CAU3_6.*

You might also like