Hướng giải của Chuẩn hóa họ tên


Nhớ rằng hướng dẫn giải này chỉ nên sử dụng khi bế tắc, và tuyệt đối không nên sao chép mã nguồn kèm theo. Hãy tôn trọng tác giả bài tập và người viết hướng dẫn giải.
Nộp mã nguồn lời giải chính thức trước khi giải bài tập đó có thể khiến bạn bị ban.

Tác giả: kienadmin

Lời giải: Chuẩn hóa họ tên

Phân tích

Đọc cả dòng bằng getline, bỏ khoảng trắng đầu cuối, chuẩn hóa khoảng trắng giữa các từ, viết hoa chữ cái đầu mỗi từ và các chữ còn lại viết thường.

Độ phức tạp

  • Thời gian: O(N)
  • Không gian: O(N)

Code mẫu C++

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);  // Đọc cả dòng có khoảng trắng

    // Bỏ khoảng trắng thừa ở đầu
    while (!s.empty() && s[0] == ' ') s.erase(0, 1);
    // Bỏ khoảng trắng thừa ở cuối
    while (!s.empty() && s.back() == ' ') s.pop_back();

    string res = "";
    bool first = true;
    string word;
    stringstream ss(s);  // Dùng stringstream để tách từ
    while (ss >> word) {  // Tự động bỏ khoảng trắng thừa giữa các từ
        if (!first) res += ' ';  // Thêm khoảng trắng phân cách
        first = false;
        // Viết hoa chữ cái đầu mỗi từ
        word[0] = toupper(word[0]);
        // Các chữ còn lại viết thường
        for (int i = 1; i < (int)word.size(); i++) {
            word[i] = tolower(word[i]);
        }
        res += word;
    }
    cout << res << endl;
    return 0;
}

Giải thích

  • stringstream giúp tách xâu thành các từ, tự động xử lý nhiều dấu cách liên tiếp.
  • touppertolower từ thư viện <cctype> để chuyển đổi chữ hoa/thường.
  • Biến first giúp quản lý việc thêm khoảng trắng phân cách giữa các từ.

Nhận xét

Không có ý kiến tại thời điểm này.