Viết chương trình C++ xử lý công việc sau: một xâu ký tự St (không phải là xâu rồng) xoá hết các ký tự không phải là chữ cái trong xâu St để thu được một xâu toàn kì tự là chữ cái, biến đổi các kí tự chữ cái trong xâu thành chữ cái hoa. Thông báo xâu St vừa tìm được. Trong trường hợp không tìm được thì thông báo - KHONG TIM DUOC
+ Tập Bai2.inp ghi: dòng 1 ghi một xâu ký tự.
+ Tập Bai2.out ghi: dòng 1 ghi một xâu ký tự là chữ cái in hoa.
Chương trình ví dụ:
Bai2.inp
aD!@#124ggghk
Bai2.out
ADGGGHK
Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
#include<bits/stdc++.h>
using namespace std;
int main(){
long long i,dem[1000],d;
string s;
cin >>s;
for(i=0;i<s.size();i++)
dem[s[i]]++;
d=0;
for(i=97;i<=122;i++)
if(dem[i]%2==1)
d++;
if(d>0)
cout<<d-1;
else
cout<<0;
return 0;
}
Đếm số lần xuất hiện của các kí tự 'a'..'z' trong xâu S. Dễ thấy với các kí tự có số lần xuất hiện là chẵn, ta có thể xếp một nửa kí tự đó sang 2 bên thỏa mãn tính chất đối xứng. Đối với kí tự có số lần xuất hiện là lẻ, ta làm tương tự và đưa kí tự còn lại vào trung tâm. Như vậy, để xâu sau khi xóa đối xứng thì chỉ có duy nhất một kí tự có số lần xuất hiện lẻ nên ta sẽ xóa các kí tự lẻ đó, chỉ để lại 1 hoặc 0 cái cuối cùng.
code tham khảo:
int main()
{
string s;
cin >> s;
vector<int> fre(256, 0);
for (char c : s) fre[c]++;
int res = 0;
for (int x : fre) res += (x % 2 == 1);
cout << res - (res > 0);
return 0;
}
uses crt;
var st:string;
i,d:integer;
begin
clrscr;
readln(st);
d:=length(st);
for i:=1 to d do
if (st[i]='a') or (st[i]='A') then st[i]:='b';
writeln(st);
readln;
end.
uses crt;
var st:string[50];
d,i:integer;
begin
clrscr;
write('Nhap xau:'); readln(st);
d:=length(st);
for i:=1 to d do
if st[i] in ['a'..'z'] then write(st[i]:4);
readln;
end.
uses crt;
var a,b:string;
i,d:integer;
begin
clrscr;
write('Nhap xau a:'); readln(a);
d:=length(a);
b:='';
for i:=1 to d do
if a[i] in ['A'..'Z'] then b:=b+a[i];
writeln(b);
readln;
end.
Program HOC24;
var s: string;
i,x: byte;
begin
readln(s);
//-----------Câu a
while s[1]=#32 do delete(s,1,1);
while s[length(s)]=#32 do delete(s,length(s),1);
while pos(#32#32,s)<>0 do delete(s,pos(#32#32,1);
writeln(s);
//-------------Câu b
s[1]:=upcase(s[1]);
for i:=1 to length(s) do
if s[i]=#32 upcase(s[i+1]);
writeln(s);
//--------------Câu c
for i:=1 to length(s) do
if s[i]=#32 then x:=i;
for i:=x+1 to length(s) do
write(s[i]);
//---------------------------
readln
end.
câu 1 Uses Crt;
Var St:String;
dem: Array[‘A’..’Z’] Of Byte
; i:Byte;
ch:Char;
Begin Write(‘Nhap xau St: ‘);
Readln(St);
{Khởi tạo mảng} For ch:=’A’ To ‘Z’ Do dem[ch]:=0;
{Duyệt xâu} For i:=1 To Length(St) Do If Upcase(St[i]) IN [‘A’..’Z’] Then Inc(dem[Upcase(St[i])]);
{Liệt kê các ký tự ra màn hình} For ch:=’A’ To ‘Z’ Do If dem[ch]>0 Then Writeln(ch,’ : ’,dem[ch]);
Readln;
uses crt;
var st:string;
i,d:integer;
begin
clrscr;
readln(st);
d:=length(st);
for i:=1 to d do
if (st[i] in ['a'..'z']) or (st[i] in ['A'..'Z']) then write(st[i]);
writeln;
for i:=1 to d do
if (st[i] in ['0'..'9']) then write(st[i]);
readln;
end.
Hướng dẫn giải:
- Sử dụng một chuỗi mới để lưu các kí tự là chữ cái (thuộc trong khoảng 'A' đến 'z')
- Kiếm tra chuỗi mới đó nếu là rỗng => in KHONG TIM DUOC, ngược lại in ra chuỗi in hoa tất cả các ký tự (sử dụng hàm toupper())
Code tham khảo: