Professional Documents
Culture Documents
Một số hàm phổ biết xử lý xâu trong c++: Bài 1: Nhập vào một xâu ký tự, đếm xem xâu đó có bao nhiêu ký tự ‘A'
Một số hàm phổ biết xử lý xâu trong c++: Bài 1: Nhập vào một xâu ký tự, đếm xem xâu đó có bao nhiêu ký tự ‘A'
• 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;
}
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
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
nguyen van a 3
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
454654654 NO
123321 YES
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.*
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