Tin học đại cương - Bài 7: Xâu ký tự

pdf 20 trang vanle 1810
Bạn đang xem tài liệu "Tin học đại cương - Bài 7: Xâu ký tự", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftin_hoc_dai_cuong_bai_7_xau_ky_tu.pdf

Nội dung text: Tin học đại cương - Bài 7: Xâu ký tự

  1. BÀI 7: XÂU KÝ TỰ Nguyễn Mạnh Hiển Khoa Công nghệ thông tin hiennm@tlu.edu.vn
  2. Xâu ký tự • Xâu (chuỗi) ký tự, gọi tắt là xâu (chuỗi): − Là một dãy ký tự liên tiếp, tạo bởi các chữ cái, chữ số, ký hiệu (+, -, &, !, ) và dấu trắng (dấu cách, dấu xuống dòng, ) • Xâu phải được đặt giữa hai dấu nháy kép " " "Xin chao moi nguoi!" • Xâu có thể rỗng ("") hoặc chỉ có một ký tự − Xâu "A" khác với ký tự 'A' string s1 = "A"; // OK string s2 = 'A'; // Lỗi
  3. Lớp string trong thư viện chuẩn C++ • Lớp string biểu diễn kiểu dữ liệu xâu ký tự − cho phép khai báo biến để lưu trữ xâu ký tự − hỗ trợ các thao tác xử lý xâu thuận tiện • Cần khai báo tệp tiêu đề string: #include
  4. Khai báo và khởi tạo biến xâu • Khai báo: string s1; • Khai báo kết hợp khởi tạo: string s1 = "Day la mot xau ky tu"; • Khai báo và khởi tạo riêng biệt: string s1; // khai báo s1 = "Chuc vui ve!"; // khởi tạo
  5. Nhập và in xâu #include #include Hàm getline cũng using namespace std; được khai báo trong int main() tệp tiêu đề string { string s; cout << "Nhap mot xau ky tu: "; getline(cin, s); // ham getline cho phep nhap // xau chua dau cach cout << "Xau vua nhap la: " << s << endl; return 0; }
  6. Truy nhập các ký tự trong xâu • Các ký tự trong xâu được lưu trữ vào các ô nhớ liên tiếp nhau và được đánh số thứ tự (chỉ số) từ 0 string s = "Xin chao!"; 0 1 2 3 4 5 6 7 8 X i n c h a o ! • Các ký tự trong xâu được truy nhập bằng chỉ số char c = s[6]; // Gán ký tự ở vị trí 6 cho // biến ký tự c. cout << c; // Sẽ in ra "a". cout << s[0]; // Sẽ in ra "X".
  7. Truy nhập các ký tự trong xâu • Có thể thay đổi ký tự ở một vị trí trong xâu bằng phép gán 0 1 2 3 4 5 6 7 8 X i n c h a o ! s[1] = 'I'; // 'i' sẽ được thay bằng 'I' s[2] = 'N'; // 'n' sẽ được thay bằng 'N' cout << s; // Sẽ in ra "XIN chao!" • Chú ý: Chỉ được gán ký tự cho mỗi vị trí trong xâu s[4] = 'P'; // OK s[5] = "Q"; // Lỗi
  8. Một số hàm xâu và ký tự tiện lợi • Hàm size trả về kích thước của xâu string s = "Xin chao!"; cout << s.size(); // Sẽ in ra "9" • Các hàm sau đây được khai báo trong tệp tiêu đề cctype (khác với hàm size, chúng là những hàm độc lập và không thuộc lớp string) − Hàm toupper(c) trả về ký tự hoa ứng với ký tự c − Hàm tolower(c) trả về ký tự thường ứng với ký tự c char c1 = toupper('a'); // c1 = 'A' char c2 = tolower('B'); // c2 = 'b' char c3 = toupper('E'); // c3 = 'E'
  9. Nhập xâu, hiển thị mỗi ký tự trong xâu trên một dòng #include #include using namespace std; int main() Hàm size trả về { số ký tự của xâu s string s; cout << "Nhap mot xau ky tu: "; getline(cin, s); for (int i = 0; i < s.size(); i++) cout << s[i] << endl; // in s[i] tren mot dong return 0; }
  10. Nhập xâu, hiển thị xâu chữ hoa tương ứng lên màn hình #include #include #include using namespace std; int main() { string s; cout << "Nhap mot xau ky tu: "; getline(cin, s); for (int i = 0; i < s.size(); i++) { char c = toupper(s[i]); cout << c; } Hàm toupper trả về ký return 0; tự hoa của ký tự s[i] }
  11. Ghép xâu • Dùng phương thức append string s1 = "Good"; string s2 = "morning!"; s1.append(s2); // s1 = "Goodmorning!" • Cũng có thể dùng toán tử + hoặc += thay cho append s1 = s1 + " " + s2; // s1 = "Good morning!" s1 = ""; // s1 trở thành xâu rỗng s1 += s2; // s1 = "morning!" • Dùng phương thức push_back để thêm một ký tự vào cuối xâu string s3 = "Hi"; s3.push_back('!'); // s3 = "Hi!" Chỉ ký tự ở đây, xâu ký tự không được phép
  12. Viết hàm có một tham số kiểu xâu và trả về xâu chữ thường tương ứng (1) #include #include #include using namespace std; string chu_thuong(string s) { string s2 = ""; // s2 se chua xau chu thuong for (int i = 0; i < s.size(); i++) s2.push_back(tolower(s[i])); return s2; }
  13. Viết hàm có một tham số kiểu xâu và trả về xâu chữ thường tương ứng (2) int main() { string s1, s2; cout << "Nhap mot xau ky tu: "; getline(cin, s1); s2 = chu_thuong(s1); cout << "Xau chu thuong tuong ung la: " << s2; return 0; }
  14. Xóa xâu con • Dùng phương thức erase(pos, len) − pos: vị trí bắt đầu cắt bỏ (tính từ 0) − len: số ký tự muốn cắt bỏ • Ví dụ: string s = "Lap trinh C++"; cout << s; // Sẽ in ra "Lap trinh C++" s.erase(0, 10); // Cắt bỏ xâu con "Lap trinh " cout << s; // Sẽ in ra "C++"
  15. Chèn xâu con • Dùng phương thức s1.insert(pos, s2) − pos: vị trí bắt đầu chèn (tính từ 0) − s2: xâu con để chèn vào xâu s1 • Ví dụ: string s = "ABEF"; cout << s; // Sẽ in ra ABEF s.insert(2, "CD"); // Chèn CD vào giữa AB và EF cout << s; // Sẽ in ra ABCDEF
  16. Truy nhập xâu con • Dùng phương thức substr(pos, len) − Trả về xâu con dài len ký tự, bắt đầu từ vị trí pos (tính từ 0) • Ví dụ: string truong = "Dai hoc Thuy Loi"; string s = truong.substr(8, 8); cout << s; // Sẽ in ra "Thuy Loi"
  17. Tìm xâu con • Dùng phương thức s1.find(s2) để tìm xâu con s2 trong xâu s1 − Trả về vị trí đầu tiên của s2 trong s1 − Nếu không tìm thấy, trả về -1 • Ví dụ: string truong = "Dai hoc Thuy Loi"; int k1 = truong.find("hoc"); cout << k1; // Sẽ in ra 4 int k2 = truong.find("Hoc"); cout << k2; // Sẽ in ra -1 vì không tìm thấy "Hoc"
  18. Viết hàm có một tham số kiểu xâu và trả về số ký tự số (0, 1, , 9) trong xâu (1) #include #include using namespace std; int so_ky_so(string s) { int dem = 0; // dem se chua so ky tu so for (int i = 0; i dem = dem + 1 return dem; }
  19. Viết hàm có một tham số kiểu xâu và trả về số ký tự số (0, 1, , 9) trong xâu (2) int main() { string s; cout << "Nhap mot xau ky tu: "; getline(cin, s); int k = so_ky_so(s); cout << "So ky tu so la " << k; return 0; }
  20. Hết bài 7