Chuẩn hóa tên là một công việc thường gặp khi xử lý chuỗi. Trong bài viết này mình sẽ hướng dẫn các bạn phương pháp để bạn có thể chuẩn hóa tên theo nhiều yêu cầu khác nhau.
1. Bài toán chuẩn hóa tên 1
Bài toán này sẽ yêu cầu bạn chuẩn hóa tên bằng cách loại bỏ dấu cách thừa giữa các từ và viết hoa chữ cái đầu của từng từ.
Ví dụ " nguYEN Thuy linH" => "Nguyen Thuy Linh"
Phương pháp làm những bài toán chuẩn hóa tên đó là bạn nên tách từng từ ra sau đó xử lý từng từ và gộp lại
Mã nguồn :
#include <string>
#include <ctype.h>
#include <sstream>
using namespace std;
int main() {
string name = "tran VAn AzBoOK";
stringstream ss(name);
string res = "", word;
while (ss >> word) {
res += toupper(word[0]);
for (int j = 1; j < word.size(); j++) {
res += tolower(word[j]);
}
res += " ";
}
res.pop_back();
cout << "Ten chuan hoa : " << res << endl;
}
Output :
2. Bài toán chuẩn hóa tên 2
Bài toán này yêu cần bạn in ra tên trước rồi mới tới họ và đệm
Ví dụ "tran VaN AZBook" => "Azbook Tran Van"
Để dễ dàng đưa ra các từ theo thứ tự mong muốn thì bạn nên lưu lại các từ vào trong 1 vector hoặc mảng, nếu bạn chưa biết vector có thể tham khảo tại đây
Mã nguồn :
#include <string>
#include <ctype.h>
#include <sstream>
#include <vector>
using namespace std;
// Ham nay chuan hoa 1 tu
string convert(string s) {
s[0] = toupper(s[0]);
for (int i = 1; i < s.size(); i++) {
s[i] = tolower(s[i]);
}
return s;
}
int main() {
string name = "tran VAn AzBOok";
stringstream ss(name);
vector<string> v;
string word;
while (ss >> word) {
v.push_back(convert(word));
}
cout << "Ten sau khi chuan hoa : ";
cout << v[v.size() - 1] << " ";
for (int i = 0; i < v.size() - 1; i++) {
cout << v[i];
if (i != v.size() - 2) {
cout << " ";
}
}
}
Output :
Bằng cách lưu từng từ trong tên vào vector hoặc mảng thì bạn có thể chủ động trong việc in ra theo thứ tự mà đề bài yêu cầu.
3. Bài toán cấp email theo tên
Bài toán cấp email thường gặp khi bạn cần cung cấp email cho các nhân viên trong 1 công ty hay các sinh viên trong trường đại học dựa trên tên của họ.
Ví dụ tên "Nguyen Van Nam" sẽ được cấp email là "[email protected]" chẳng hạn
Tên email được cấp bằng cách lấy tên và ghép với các chữ cái đầu tiên của họ và đệm.
Có nhiều kiểu cấp email khác nhau nhưng bạn có thể làm tương tự kiểu chuẩn email này.
Mã nguồn :
#include <string>
#include <ctype.h>
#include <sstream>
#include <vector>
using namespace std;
int main() {
string name = "tran VAn loNG";
for (int i = 0; i < name.size(); i++) {
name[i] = tolower(name[i]);
}
stringstream ss(name);
vector<string> v;
string word;
while (ss >> word) {
v.push_back(word);
}
string email = v[v.size() - 1]; // ten
for (int i = 0; i < v.size() - 1; i++) {
email += v[i][0]; // ki tu dau tien cua ho va dem
}
email += "@azbook.org";
cout << "Email duoc cap : " << email << endl;
}
Output :