Top 10 Bài Tập Chuỗi Ký Tự C++ để Nâng Cao Kỹ Năng Lập Trình | Laptrinhcanban.com

HOME › >>

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>

int main() {
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;

return 0;
}

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>

int main() {
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;

return 0;
}

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>

int main() {
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];

if (count[currentChar] > maxCount) {
maxCount = count[currentChar];
mostFrequentChar = 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;

return 0;
}

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>

int main() {
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;
}
}

return 0;
}

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ỏ.

#include <iostream>
#include <cctype>
#include <cstring>

int main() {
char str[100];
char result[100];
int resultIndex = 0;

// Nhập chuỗi từ người dùng
std::cout << "Nhap chuoi: ";
std::cin.getline(str, sizeof(str));

// Loại bỏ ký tự số
for (int i = 0; i < strlen(str); ++i) {
if (!isdigit(str[i])) {
result[resultIndex++] =

str[i];
}
}

result[resultIndex] = '\0';

// In ra chuỗi kết quả
std::cout << "Chuoi sau khi loai bo ky tu so: " << result << std::endl;

return 0;
}

6. Bài Tập Kiểm Tra Chuỗi Palindrome

Viết một chương trình C++ để kiểm tra xem một chuỗi có phải là chuỗi palindrome hay không. Chuỗi palindrome là chuỗi đọc xuôi ngược đều giống nhau.

#include <iostream>
#include <cstring>

bool isPalindrome(const char* str) {
int len = strlen(str);

for (int i = 0; i < len / 2; ++i) {
if (str[i] != str[len - i - 1]) {
return false;
}
}

return true;
}

int main() {
char str[100];

// Nhập chuỗi từ người dùng
std::cout << "Nhap chuoi: ";
std::cin.getline(str, sizeof(str));

// Kiểm tra chuỗi palindrome
if (isPalindrome(str)) {
std::cout << "Chuoi la chuoi Palindrome." << std::endl;
} else {
std::cout << "Chuoi khong la chuoi Palindrome." << std::endl;
}

return 0;
}

7. Bài Tập Đếm Số Ký Tự Đặc Biệt

Viết một chương trình C++ để đếm số lượng ký tự đặc biệt (không phải chữ cái, không phải số) trong một chuỗi ký tự.

#include <iostream>
#include <cctype>
#include <cstring>

int countSpecialCharacters(const char* 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;
}

int main() {
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;

return 0;
}

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>

int findMax(const int* numbers, int count) {
int max = numbers[0];

for (int i = 1; i < count; ++i) {
if (numbers[i] > max) {
max = numbers[i];
}
}

return max;
}

int findMin(const int* numbers, int count) {
int min = numbers[0];

for (int i = 1; i < count; ++i) {
if (numbers[i] < min) {
min = numbers[i];
}
}

return min;
}

int main() {
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::stringstream ss(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;

return 0;
}

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>

void printNonRepeatingCharacters(const char* 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;
}

int main() {
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);

return 0;
}

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.

#include <iostream>
#include <sstream>
#include <unordered_map>

// 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::istringstream stream(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;
}

int main() {
// 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 (const auto& it : ketQua) {
std::cout << "'" << it.first << "': " << it.second << " lan\n";
}

return 0;
}

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++.

URL Link

https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/chuoi-string-trong-cpp/bai-tap-ve-chuoi-ky-tu-trong-cpp/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.