Hướng dẫn giải của Tên chuẩn (đề HSG 9 Phú Thọ 2014-2015)


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Cho một dòng tên bị virus làm thay đổi (có thể thừa dấu cách, chữ hoa/thường lẫn lộn). Cần đưa về tên chuẩn: mỗi từ có chữ cái đầu viết hoa, các chữ còn lại viết thường, các từ cách nhau đúng một dấu cách, không có dấu cách đầu và cuối. Đề dùng file TENCHUAN.INP và TENCHUAN.OUT.

Chỉ có 1 sub

Bài này chỉ cần một thao tác: tách từ, đổi chữ đầu thành hoa, các chữ còn lại thành thường, rồi nối lại bằng một dấu cách. Không có cách vét cạn nào khác đáng kể nên chỉ viết một sub (lý do theo hướng dẫn).

Nếu nộp: đúng 20/20 test.

Chương trình hoàn chỉnh

Main đọc một dòng từ TENCHUAN.INP, gọi sub1 để tách từ và chuẩn hóa, rồi ghi ra TENCHUAN.OUT.

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

// Chi co 1 sub: bai chi can tach tu, doi chu cai dau thanh hoa, con lai thanh thuong,
// roi noi lai bang mot dau cach. Khong co cach vet can nao khac dang ke.
void sub1() {
    string line;
    getline(cin, line);
    vector<string> words;
    string w;
    for (char ch : line) {
        if (isalpha((unsigned char)ch)) {
            w += ch;
        } else if (!w.empty()) {
            words.push_back(w);
            w.clear();
        }
    }
    if (!w.empty()) words.push_back(w);
    string res;
    for (size_t i = 0; i < words.size(); i++) {
        string t = words[i];
        for (size_t j = 0; j < t.size(); j++)
            t[j] = (j == 0) ? toupper((unsigned char)t[j]) : tolower((unsigned char)t[j]);
        if (i) res += ' ';
        res += t;
    }
    cout << res << "\n";
}

int main() {
    freopen("TENCHUAN.INP", "r", stdin);
    freopen("TENCHUAN.OUT", "w", stdout);
    sub1();
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.