← 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 + ...