1307 - Chuẩn hoá từ

Lời giải:

Các bước để giải bài toán:

  • Bước 1: Đọc số n từ input
  • Bước 2: Thực hiện n lần các thao tác sau:
    • Bước 1: Đọc dòng tiếp theo của input và lưu vào xâu line.
    • Bước 2: Tách các từ trong xâu line và lưu các từ được tách vào mảng tokens (với C++, có thể dùng kiểu dữ liệu vector<string> để biểu diễn mảng tokens).
  • Bước 3: Duyệt qua mọi xâu s trong mảng tokens. Với mỗi xâu s, ta cần chuyển kí tự đầu tiên sang kí tự in hoa và các kí tự còn lại sang kí tự in thường.
  • Bước 4: In ra các xâu s trong mảng tokens ra output.

Đối với ngôn ngữ C++:

  • Để đọc một dòng từ input vào xâu line, ta có thể gọi hàm getline(cin, line).
  • Để tách các từ trong xâu line, ta có thể sử dụng kiểu dữ liệu stringstream. Kiểu dữ liệu này cho phép tạo một luồng từ xâu cho trước, và từ luồng đó có thể lần lượt đọc vào các từ trong xâu (tương tự như viêc đọc từ luồng nhập chuẩn cin).
  • Để chuyển một kí tự c sang dạng in hoa, ta có thể gọi hàm toupper(c).
  • Để chuyển một kí tự c sang dạng in thường, ta có thể dùng hàm tolower(c).

Mã nguồn tham khảo:

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    string line;
    getline(cin, line);
    while (n--) {
        getline(cin, line);    
        vector<string> name;
        stringstream ss(line);
        string s;
        while (ss >> s) {
            s[0] = toupper(s[0]);
            for(int i = 1; i < s.length(); ++i)
                s[i] = tolower(s[i]);
            name.push_back(s);
        }

        for(int i = 0; i < name.size(); ++i) {
            cout << name[i];
            if (i < name.size() - 1)
                cout << " ";
        }
        cout << endl;
    }
    return 0;
}

Tìm hiểu thêm về các keyword cho bài toán này: implementation, string