Chuẩn hóa xâu, tách họ và tên

201
Lập trình C++

Bài toán. Chuẩn hóa xâu s nhập vào. Yêu cầu:

          – Xóa tất cả dấu cách thừa

          – Thay các ký tự đầu mỗi từ bằng chữ IN HOA

          – Tách ra: Họ và tên đệm trên 1 dòng, tên trên một đòng.

Ví dụ:

CHUANE.INP

CHUANE.OUT

    dO    truNg    tHanh

Do Trung

Thanh

Code tham khảo:

#include <iostream>
#include <cstring>
using namespace std;
string s;
void chuanXau() {
    while(s.find("  ") >= 0) {
        int p = s.find("  ");
        if(p >= 0)
            s.erase(p,1);
        else break;
    }
    if(s[0] == ' ')
        s.erase(0,1);
    if(s[s.length()-1] == ' ')
        s.erase(s.length(),1);
}
void chuHoa() {
    for(int i=1; i<=s.length()-1; i++)
        if(s[i] >= 'A' && s[i] <= 'Z')
            s[i] += 32;
    if(s[0] >= 'a' && s[0] <= 'z')
        s[0] -= 32;
    for(int i=1; i<=s.length()-1; i++)
        if(s[i] == ' ' && s[i+1] >= 'a' && s[i+1] <= 'z')
            s[i+1] -= 32;
}

int main() {
    freopen("CHUANE.INP","r",stdin);
    freopen("CHUANE.OUT","w",stdout);
    getline(cin, s);
    chuanXau();
    chuHoa();
    string s2 = "";
    int i = s.length()-1;
    while(s[i] != ' ') {
        s2 = s[i] + s2;
        s.erase(i,1);
        if(s[i] == ' ') break;
        i--;
    }
    cout << s << endl << s2;
    return 0;
}