KIỂU CHUỖI KÝ TỰ (STRING)

Một phần của tài liệu Giáo trình tin học cơ sở A pot (Trang 83 - 87)

12.1.1 Khái niệm Như ta đã biết, dữ liệu kiểu char chỉ chứa được một ký tự, để cĩ thể lưu trữ một chuỗi (nhiều ký tự) ta sử dụng mảng ký tự (Chương 11 – Dữ liệu kiểu mảng). 12.1.2 Khai báo

Kiểu dữ liệu chuỗi được khai báo theo cú pháp khai báo mảng một chiều với mỗi phần tử cĩ kiểu char (ký tự).

Ví dụ:

char s[10];

Biến s được khai báo như trên cĩ thể chứa được một chuỗi cĩ độ dài tối đa là 9 ký tự (khơng phải là 10) do trong C chuỗi được được xem là một loạt các ký tự kết thúc bởi ký tự rỗng (NULL), ký hiệu là \0.

Giống như cách khởi tạo mảng thơng thường, để khởi tạo cho chuỗi s giá trị “THCS A” ta thực hiện như sau:

char s[10] = {‘T’, ‘H’, ‘C’, ‘S’, ‘ ’, ‘A’, ‘\0’};

Tuy nhiên, ta cĩ thể khởi tạo cho chuỗi ngắn gọn hơn bằng cách sử dụng chuỗi thường (chuỗi được bao bởi cặp dấu “ ”). Lúc này trình biên dịch tựđộng thêm vào ký tự kết thúc chuỗi (‘\0’).

char s[10] = “THCS A”;

char s[] = “THCS A”; // Tu xac dinh do dai

12.1.3 Nhập xuất chuỗi

Để xuất chuỗi, ta cĩ thể sử dụng hàm printf với đặc tả “%s” hoặc hàm puts như sau:

Hàm xut d liu ra màn hình (#include <stdio.h>)

int puts(const char *s);

Hàm puts xuất chuỗi s ra màn hình và tựđộng xuống dịng. Nếu thành cơng sẽ trả về giá trị khơng âm, ngược lại sẽ trả về EOF.

Ví dụ:

char ten[] = “THCS A”;

printf(“%s”, ten); // Khong xuong dong

puts(ten); // Tu dong xuong dong

Để nhập chuỗi, ta cĩ thể sử dụng hàm scanf( ) với đặc tả “%s” nhưng hàm này chỉđọc các ký tự từ bàn phím đến khi gặp ký tự khoảng trắng. Ví dụ: char ten[100; scanf(“%s”, &ten); puts(ten);

Để nhập được một chuỗi đầy đủ, ta sử dụng hàm sau:

Hàm nhp d liu t bàn phím (#include <stdio.h>)

char *gets(char *s);

Hàm gets đọc tất cả các ký tự nhập từ bàn phím đến khi gặp ký tự sang dịng mới (khi ta nhấn enter). Hàm gets sẽ loại bỏ ký tự enter và thêm vào chuỗi ký tự kết thúc chuỗi ‘\0’. Hàm gets trả vềđịa chỉ của chuỗi nhận được.

Ví dụ:

char ten[100]; gets(ten); puts(ten);

12.1.4 Các thao tác trên dữ liệu kiểu chuỗi

Chuỗi chính là mảng ký tự, do đĩ khơng thể gán dữ liệu giữa hai kiểu chuỗi. Thay vào đĩ ta sử dụng lệnh strcpy được định nghĩa trong string.h.

Hàm sao chép chui (#include <string.h>)

char *strcpy(char *dest, const char *src);

Sao chép chuỗi src sang chuỗi dest, kết thúc khi gặp ký tự kết thúc chuỗi. Hàm trả vềđịa chỉ chuỗi dest. (adsbygoogle = window.adsbygoogle || []).push({});

char s[100];

s = “Tin hoc co so A”; // Sai

strcpy(s, “Tin hoc co so A”); // Dung

Trong string.h cịn cung cấp một số hàm khác thao tác trên dữ liệu kiểu chuỗi ký tự. Một vài hàm quan trọng như sau:

Hàm chuyn chui thành chui thường (#include <string.h>)

char *strlwr(char *s);

Hàm strlwr chuyển chuỗi s thành chuỗi thường (các ký tự ‘A’, ‘B’, …, ‘Z’ thành ‘a’, ‘b’, … ‘z’) và trả vềđịa chỉ của chuỗi s.

Hàm chuyển chuỗi thành hoa (#include <string.h>)

char *strupr(char *s);

Hàm strupr chuyển chuỗi s thành chuỗi hoa (các ký tự ‘a’, ‘b’, …, ‘z’ thành ‘A’, ‘B’, … ‘Z’) và trả vềđịa chỉ của chuỗi s.

Hàm đảo ngược chui (#include <string.h>)

char *strrev(char *s);

Hàm đảo ngược thứ tự các ký tự trong chuỗi (trừ ký tự kết thúc chuỗi) và trả vềđịa chỉ của chuỗi kết quả.

Hàm so sánh hai chui (#include <string.h>)

int *strcmp(const char *s1, const char *s2);

Hàm trả về < 0 nếu s1 < s2; = 0 nếu s1 = s2, > 0 nếu s1 > s2.

Hàm ni hai chui (#include <string.h>)

char *strcat(char *dest, const char *src);

Hàm nối chuỗi src và chuỗi dest và trả về địa chỉ của chuỗi đã được nối.

Hàm tính độ dài chui (#include <string.h>)

size_t *strlen(const char *s);

Hàm trả vềđộ dài chuỗi.

Hàm tìm chui này trong chui kia (#include <string.h>)

char *strstr(const char *s1, const char *s2);

Hàm tìm vị trí xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1. Hàm trả về địa chỉ của thành phần đầu tiên trong chuỗi s1 tìm được. Nếu khơng tìm được thì trả về null.

Một phần của tài liệu Giáo trình tin học cơ sở A pot (Trang 83 - 87)