Tin học 10: C++/Bài 21
Thứ tự bài | Nội dung bài |
---|---|
Bài tập 1 | Kiểm tra chuỗi đối xứng |
Bài tập 2 | Chuẩn hóa tên riêng |
Bài tập 3 | Loại bỏ dấu cách có trong chuỗi kí tự |
Bài tập 4 | Đếm số lượng kí tự viết hoa và viết thường trong chuỗi |
Bài tập 5 | Tính tổng các chữ số của một số |
Bài tập 1
sửaMô tả bài toán: Một chuỗi được gọi là chuỗi đối xứng nếu viết xuôi từ trái sang phải hay viết ngược từ phải sang trái đều giống nhau. Ví dụ, chuỗi "abcba" là chuỗi xứng, còn "abcd" thì không. Hãy viết chương trình kiểm tra xem một chuỗi có phải là chuỗi đối xứng hay không.
Cách 1
sửaCách làm: Duyệt ngược chuỗi ban đầu để tạo ra chuỗi mới. Sau đó so sánh chuỗi mới và chuỗi ban đầu. Nếu giống nhau thì là nó chuỗi đối xứng, ngược lại là không.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1, s2;
cout << "Nhap chuoi: ";
getline(cin, s1);
for (int i = s1.size() - 1; i >= 0; i--)
s2 += s1[i];
if (s1 == s2) cout << "Doi xung";
else cout << "Khong doi xung";
return 0;
}
Cách 2
sửaDuyệt từng kí trong chuỗi ban đầu và so sánh nó với kí tự đối xứng. Nếu có 1 cặp kí tự không giống nhau thì kết luận là không đối xứng, ngược lại là có. Đây là cách thường dùng nhất khi kiểm tra chuỗi đối xứng.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s; bool check = true;
cout << "Nhap chuoi: ";
getline(cin, s);
int len = s.size() // Lưu trữ độ dài chuỗi
for (int i = 0; i < len; i++)
if (s[i] != s[len-1 - i]) {
check = false; break;
}
if (check) cout << "Doi xung";
else cout << "Khong doi xung";
return 0;
}
Bài tập 2
sửaMô tả bài toán: Quy tắc khi viết một tên riêng (tên người, địa danh) thì phải viết hoa tất cả chữ cái đầu. Cho một tên riêng chưa được chuẩn hóa, hãy viết chương trình chuẩn hóa tên riêng đó theo quy tắc trên. Ví dụ:
- "nGUYEN vAN aN" chuẩn hóa thành "Nguyen Van An"
- "BA RiA vUng tau" chuẩn hóa thành "Ba Ria Vung Tau"
- "ly thai to" chuẩn hóa thành "Ly Thai To"
Cách 1
sửa- Về mặt thuật toán: Duyệt tất cả kí tự của chuỗi. Với kí tự đầu tiên và kí tự đứng sau dấu cách thì viết hoa, ngược lại thì viết thường.
- Về mặt kĩ thuật: Sử dụng hàm toupper và tolower được xây dựng sẵn trong thư viện cctype để có thể chuyển kí tự thành in hoa hoặc thường.
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main() {
string s; getline(cin, s);
s[0] = toupper(s[0]);
for (int i = 1; i < s.size(); i++) {
if (s[i-1] == ' ') s[i] = toupper(s[i]);
else s[i] = tolower(s[i]);
}
cout << s;
return 0
}
Cách 2
sửa- Về mặt thuật toán: Duyệt tất cả kí tự của chuỗi. Với kí tự đầu tiên và kí tự đứng sau dấu cách, nếu viết chưa viết hoa thì chuyển thành viết hoa. Với các kí tự ở vị trí còn lại, nếu viết hoa thì chuyển thành viết thường.
- Về mặt kĩ thuật: Không sử dụng thư viện cctype.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s; getline(cin, s);
int d = 'a' - 'A'; // Khoảng cách giữa hai kí tự hoa và thường
if (s[0] >= 'a') s[0] -= d;
for (int i = 1; i < s.size(); i++) {
if (s[i] == ' ') continue;
if (s[i-1] == ' ') { if (s[i] >= 'a') s[i] -= d; }
else { if (s[i] < 'a') s[i] += d; }
}
cout << s;
return 0;
}
Bài tập 3
sửaMô tả bài toán: Cho một chuỗi ban đầu. In ra chuỗi mới là chuỗi ban đầu sau khi loại bỏ hết kí tự cách. Ví dụ: chuỗi "Ngon ngu lap trinh" sau khi loại bỏ hết dấu cách sẽ là "Ngonngulaptrinh".