← Danh sách bài học
🔤
Chuỗi
Chuỗi trong C++ hiện đại dùng std::string — an toàn hơn char[]. Hỗ trợ nối +, so sánh ==, indexing s[i], length s.size().
1. Nhập chuỗi
cin >> s: chỉ đọc đến khoảng trắng. getline(cin, s): đọc cả dòng. Trước getline sau cin >> phải cin.ignore().
2. Thao tác thường dùng
s.substr(pos, len), s.find("abc"), s.replace(pos, len, "x"), s.erase(pos, len), s + t, to_string(123), stoi(s).
string s = "Hello World";
cout << s.substr(6, 5); // World
cout << s.find("World"); // 6
s.replace(6, 5, "C++"); // Hello C++3. Duyệt và biến đổi ký tự
Dùng <cctype>: isdigit, isalpha, isspace, toupper, tolower.
💻 Code mẫu thực chiến
Chuẩn hoá tên riêng
Nhập "nGuyeN vAn A" → "Nguyen Van A" (viết hoa chữ đầu mỗi từ).
#include <iostream>
#include <cctype>
using namespace std;
int main() {
string s; getline(cin, s);
bool dau = true;
for (auto& c : s) {
if (isspace(c)) dau = true;
else { c = dau ? toupper(c) : tolower(c); dau = false; }
}
cout << s;
}Kiểm tra email hợp lệ (đơn giản)
Có đúng 1 ký tự @ và có dấu . sau @.
string e; cin >> e;
int at = e.find('@');
int dot = e.rfind('.');
bool ok = at > 0 && dot > at+1 && dot < (int)e.size()-1;
cout << (ok ? "Hop le" : "Sai");💡 Mẹo & lưu ý
- So sánh chuỗi bằng == an toàn (khác char*).
- s.size() trả về size_t (unsigned) — cẩn thận khi so sánh với số âm.
- Nối chuỗi trong vòng lặp: dùng s += phần_tử, nhanh hơn s = s + ...