Top 10 Bài Tập Chuỗi Ký Tự C++ để Nâng Cao Kỹ Năng Lập Trình
Cùng tìm hiểu về top 10 bài tập về chuỗi ký tự trong C++. Chuỗi ký tự là một khía cạnh quan trọng của lập trình C++, và việc hiểu và làm việc với chuỗi có thể giúp bạn trở thành một lập trình viên thành thạo. Trong bài viết này, chúng ta sẽ khám phá và thực hiện một danh sách top 10 bài tập về chuỗi ký tự trong C++. Các bài tập này sẽ giúp bạn củng cố kiến thức và phát triển kỹ năng lập trình của mình. Hãy bắt đầu với những thách thức thú vị!
1. Bài Tập Đảo Ngược Chuỗi
Viết một chương trình C++ để đảo ngược một chuỗi ký tự. Đầu vào là một chuỗi, và đầu ra là chuỗi đảo ngược của nó. Bạn có thể thử nghiệm với nhiều cách khác nhau để đảm bảo hiệu suất và độ chính xác.
#include<iostream> #include<cstring>
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::cin.getline(str, sizeof(str));
// Đảo ngược chuỗi int len = strlen(str); for (int i = 0; i < len / 2; ++i) { std::swap(str[i], str[len - i - 1]); }
// In ra chuỗi đảo ngược std::cout << "Chuoi dao nguoc: " << str << std::endl;
return0; }
2. Bài Tập Tìm Từ Dài Nhất trong Chuỗi
Viết một chương trình C++ để tìm và in ra từ dài nhất trong một chuỗi. Đầu vào là chuỗi, đầu ra là từ dài nhất và độ dài của nó.
#include<iostream> #include<cstring>
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::cin.getline(str, sizeof(str));
// Tìm từ dài nhất char longestWord[100]; int maxLength = 0;
char* token = std::strtok(str, " "); while (token != nullptr) { int length = std::strlen(token); if (length > maxLength) { maxLength = length; std::strcpy(longestWord, token); }
token = std::strtok(nullptr, " "); }
// In ra từ dài nhất std::cout << "Tu dai nhat: " << longestWord << std::endl;
return0; }
3. Bài Tập Tìm Ký Tự Xuất Hiện Nhiều Nhất trong Chuỗi
Viết một chương trình C++ để tìm và in ra ký tự xuất hiện nhiều nhất trong một chuỗi. Đầu vào là chuỗi, đầu ra là ký tự và số lần xuất hiện.
#include<iostream> #include<cstring>
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::cin.getline(str, sizeof(str));
// Tìm ký tự xuất hiện nhiều nhất int count[256] = {0}; int maxCount = 0; char mostFrequentChar;
for (int i = 0; i < strlen(str); ++i) { char currentChar = str[i]; ++count[currentChar];
// In ra kết quả std::cout << "Ky tu xuat hien nhieu nhat: " << mostFrequentChar << std::endl; std::cout << "So lan xuat hien: " << maxCount << std::endl;
return0; }
4. Bài Tập Đếm Số Lần Xuất Hiện của Mỗi Ký Tự trong Chuỗi
Viết một chương trình C++ để đếm số lần xuất hiện của mỗi ký tự trong một chuỗi. Đầu vào là chuỗi, đầu ra là số lần xuất hiện của mỗi ký tự.
#include<iostream> #include<cstring>
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::cin.getline(str, sizeof(str));
// Đếm số lần xuất hiện của mỗi ký tự int count[256] = {0};
for (int i = 0; i < strlen(str); ++i) { char currentChar = str[i]; ++count[currentChar]; }
// In ra kết quả for (int i = 0; i < 256; ++i) { if (count[i] > 0) { std::cout << "Ky tu " << char(i) << ": " << count[i] << " lan" << std::endl; } }
return0; }
5. Bài Tập Loại Bỏ Ký Tự Số từ Chuỗi
Viết một chương trình C++ để loại bỏ tất cả các ký tự số từ một chuỗi ký tự. Đầu vào là chuỗi, đầu ra là chuỗi kết quả sau khi loại bỏ.
intcountSpecialCharacters(constchar* str){ int count = 0; int len = strlen(str);
for (int i = 0; i < len; ++i) { if (!isalnum(str[i]) && !isspace(str[i])) { ++count; } }
return count; }
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::cin.getline(str, sizeof(str));
// Đếm số ký tự đặc biệt int specialCharCount = countSpecialCharacters(str);
// In ra kết quả std::cout << "So ky tu dac biet: " << specialCharCount << std::endl;
return0; }
8. Bài Tập Tìm Số Lớn Nhất và Nhỏ Nhất trong Chuỗi
Viết một chương trình C++ để nhập một chuỗi chứa các số nguyên, cách nhau bởi dấu phẩy. Tìm số lớn nhất và nhỏ nhất trong chuỗi đó.
#include<iostream> #include<sstream>
intfindMax(constint* numbers, int count){ int max = numbers[0];
for (int i = 1; i < count; ++i) { if (numbers[i] > max) { max = numbers[i]; } }
return max; }
intfindMin(constint* numbers, int count){ int min = numbers[0];
for (int i = 1; i < count; ++i) { if (numbers[i] < min) { min = numbers[i]; } }
return min; }
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi cac so nguyen cach nhau boi dau phay: "; std::cin.getline(str, sizeof(str));
std::stringstreamss(str); int numbers[100]; int count = 0;
// Đọc số từ chuỗi while (ss >> numbers[count]) { ++count; if (ss.peek() == ',') { ss.ignore(); } }
// Tìm số lớn nhất và nhỏ nhất int maxNumber = findMax(numbers, count); int minNumber = findMin(numbers, count);
// In ra kết quả std::cout << "So lon nhat: " << maxNumber << std::endl; std::cout << "So nho nhat: " << minNumber << std::endl;
return0; }
9. Bài Tập In Ký Tự Không Lặp Lại trong Chuỗi
Viết một chương trình C++ để nhập một chuỗi và in ra các ký tự không lặp lại trong chuỗi đó.
#include<iostream> #include<cstring>
voidprintNonRepeatingCharacters(constchar* str){ int count[256] = {0}; int len = strlen(str);
for (int i = 0; i < len; ++i) { ++count[str[i]]; }
// In ra ký tự không lặp lại std::cout << "Cac ky tu khong lap lai: "; for (int i = 0; i < len; ++i) { if (count[str[i]] == 1) { std::cout << str[i] << " "; } }
std::cout << std::endl; }
intmain(){ char str[100];
// Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::cin.getline(str, sizeof(str));
// In ra ký tự không lặp lại printNonRepeatingCharacters(str);
return0; }
10. Bài Tập Tìm Số Lần Xuất Hiện Của Mỗi Từ trong Chuỗi
Viết một chương trình C++ để nhập một chuỗi và đếm số lần xuất hiện của mỗi từ trong chuỗi.
// Hàm tìm số lần xuất hiện của mỗi từ trong chuỗi std::unordered_map<std::string, int> demSoLanXuatHien(std::string chuoi) { std::unordered_map<std::string, int> soLanXuatHien; // Sử dụng stringstream để tách từng từ từ chuỗi std::istringstreamstream(chuoi); std::string tu;
while (stream >> tu) { // Tăng số lần xuất hiện của từ trong từ điển soLanXuatHien[tu]++; }
return soLanXuatHien; }
intmain(){ // Nhập chuỗi từ người dùng std::cout << "Nhap chuoi: "; std::string chuoi; std::getline(std::cin, chuoi);
// Tìm số lần xuất hiện của mỗi từ trong chuỗi std::unordered_map<std::string, int> ketQua = demSoLanXuatHien(chuoi);
// Hiển thị kết quả std::cout << "So lan xuat hien cua moi tu:\n"; for (constauto& it : ketQua) { std::cout << "'" << it.first << "': " << it.second << " lan\n"; }
return0; }
Chương trình này sử dụng std::unordered_map để lưu trữ số lần xuất hiện của mỗi từ. Hàm demSoLanXuatHien sử dụng std::istringstream để tách từng từ từ chuỗi và sau đó tăng giá trị tương ứng trong từ điển. Kết quả được hiển thị trong hàm main.
Kết Luận
Trên đây Kiyoshi đã hướng dẫn bạn về Top 10 bài tập về chuỗi ký tự trong C++ rồi. Những bài tập thực hành trên đây giúp bạn rèn luyện kỹ năng xử lý chuỗi ký tự trong ngôn ngữ lập trình C++. Hãy thực hiện và tìm hiểu kỹ để có cái nhìn sâu sắc hơn về cách làm việc với chuỗi, điều này sẽ hữu ích trong việc phát triển các ứng dụng thực tế. Hãy thách thức bản thân và khám phá thêm nhiều khía cạnh khác nhau của chuỗi ký tự trong C++.