III.5 Con trỏ và xâu kítự :

Một phần của tài liệu Tổng quan về ngôn ngữ C potx (Trang 70 - 72)

VI. Các lệnh rẽ nhánh không điều kiện: break, continue, goto:

III.5 Con trỏ và xâu kítự :

Ví dụ :

char *pst,st[50]; // pst là con trỏ kiểu char, st[50] là mảng kiểu char pst=”thu”;

gets(st);

printf(“%s %s”,pst,st); là đúng.

Ở đây con trỏ pst sẽ có giá trị là địa chỉ đầu của mảng đang chứa xâu kí tự “thu”. Vì vậy 2 câu lệnh sau : puts(“thu”) và puts(pst) là tương đương.

Nếu ta viết st=”thu”;

gets(pst); thì sai.

st là hằng con trỏ của mảng st (cụ thể là st[0]) nên ta không thể gán hằng địa chỉ cho hằng con trỏ được. pst là con trỏ, khi nó chưa được khởi tạo thì không nên gán giá trị cho nó.

Nếu trước đó ta gán pst=st;

Thì gets(pst); là đúng, lệnh này tương đương gets(st).

Các hàm thao tác trên xâu kí tự : các hàm này nằm trong tập tin string.h Ví dụ : char s1[80]=”Công nghệ”;

char s2[80]=”Thông tin”;

• Hàm xác định độ dài xâu : int strlen(char *str);

Độ dài xâu bằng số kí tự có nghĩa trong xâu tính từ đầu đến kí tự \0. Ví dụ : strlen(s1)=9.

• Hàm ghép xâu kí tự : char *strcat(char *str1,char *str2);

Copy nội dung xâu str2 vào đuôi xâu str1, kết quả được lưu trở lại trong str1. Ví dụ : strcat(s1,s2); s1 sẽ là “Cong ngheThong tin”, s2 không đổi.

Ta cần chú ý xem xâu str1 có đủ chỗ chứa cả 2 xâu không. • Hàm copy xâu kí tự : char *strcpy(char *str1,char *str2); Copy nội dung xâu str2 vào xâu str1.

Ví dụ : strcpy(s1,s2); s1 sẽ là “Thong tin”, s2 không đổi.

Ta không thể viết s1=s2 vì tên mảng là hằng địa chỉ, không thể gán được. Trước khi dùng hàm này cần cấp phát bộ nhớ cho chuỗi đích.

• Hàm copy xâu kí tự : char *strdup(const char *s);

Như hàm strcpy() nhung nó tự động cấp phát bộ nhớ cho chuỗi đích • Hàm tìm kiếm kí tự c trong xâu kí tự str : strchr(str,c)

• Hàm tìm kiếm xâu kí tự str2 trong xâu kí tự str1 : strstr(str1,str2) • Hàm xác định kí tự alphabet : isalpha(c)

• Hàm xác định kí tự thường và kí tự in : islower(c) và isupper(c) • Hàm xác định kí tự chữ số : isdigit()

• Hàm xác định kí tự điều khiển : iscntrl() • Hàm xác định kí tự \n , \t, blank : isspace()

• Hàm so sánh xâu kí tự : int strcmp(char *str1,char *str2); Hàm trả về giá trị :

0 nếu str1=str2 >0 nếu str1>str2 <0 nếu str1<str2 Hàm so sánh như sau :

- So sánh từng cặp kí tự của 2 xâu theo giá trị của chúng trong bảng mã ASCII - Hai xâu có độ dài khác nhau, giống nhau đến kí tự cuối cùng của xâu ngắn thì xâu dài lớn hơn.

- Hai xâu trùng nhau cả nội dung lẫn độ dài thì bằng nhau. • Một số hàm so sánh khác :

- strcmpi(str1,str2) : so sánh không phân biệt chữ hoa, chữ thường. - strncmp(str1,str2,n) : so sánh n kí tự đầu.

- strnicmp(str1,str2,n) : so sánh n kí tự đầu không phân biệt chữ hoa, chữ thường. • Các hàm chuyển đổi :

- int atoi(str): chuyển đổi xâu str thành số nguyên int. - long atol(str): chuyển đổi xâu str thành số nguyên long. - float atof(str): chuyển đổi xâu str thành số thực float. (adsbygoogle = window.adsbygoogle || []).push({});

- itoa(int value,char *string,int radix): chuyển đổi số nguyên cơ số radix thành xâu - ltoa(long value, char *string, int radix): chuyển đổi số nguyên value cơ số radix thành xâu

- ultoa(unsigned long value,char *string,int radix): chuyển đổi số nguyên value không dấu cơ số radix thành xâu

- char *ecvt(double value, int ndig, int *dec, int *sign) : chuyển số thực thành xâu - char *fcvt(double value, int ndig, int *dec, int *sign) : chuyển số thực thành xâu

Một phần của tài liệu Tổng quan về ngôn ngữ C potx (Trang 70 - 72)