CÁC HÀM XỬ LÝ XÂU KÝ TỰ TRONG C

      94

Ở bài bác Nhập xuất trong c họ đã làm cho quen với giải pháp khai báo, nhập xuất chuỗi ký tự vào C một cách 1-1 giản. Trong bài này bọn họ sẽ nói nhiều hơn nữa về những ví dụ, bài bác tập về chuỗi .

Bạn đang xem: Các hàm xử lý xâu ký tự trong c

1. Tổng quan

Chuỗi được coi như như là 1 mảng một chiều gồm các thành phần có loại char như ký tự, số lượng và bất kể ký tự đặc trưng như +, -, *, /, $, #,…Theo quy ước, một chuỗi vẫn được kết thúc bởi cam kết tự null (‘’ : kí tựrỗng).Ví dụ: chuỗi “Infoworld” được lưu trữ như sau:

*

Cách lưu trữ chuỗi ký kết tự

2. Một vài cách khai báo, khởi chế tạo chuỗi

Chúng ta xét lấy một ví dụ sau:

// e.g about string - code by nguyenvanquan7826#include int main() // khai bao chuoi co toi da 50 ky tu char name<50>; printf("Hi, What is your name? My name is: "); gets(name); printf("Hi %s, welcome khổng lồ C language ", name); // khoi tao chuoi ngay trong khi khai bao char myLove<> = "Nguyen Thi Lap Lanh"; puts(myLove); return 0;Kết quả:

Hi, What is your name? My name is: Nguyen Van quan liêu Hi Nguyen Van Quan, welcome khổng lồ C language Nguyen Thi Lap Lanh

Trong công tác trên, mình bao gồm dùng hàm puts để in chuỗi myLove ra, đó cũng là hàm để xuất chuỗi.

Như trên bạn cũng có thể thấy là khai báo chuỗi tiếp đến nhập chuỗi hoặc vừa khai báo vừa gán giá trị đến chuỗi ngay. Tuy nhiên bọn họ không thể khai báo tiếp nối mới gán quý giá như sau:

char name<50>;name = "Nguyen Van Quan"; // errorTrong trường ý muốn khai báo tiếp đến mới gán giá bán trị, bọn họ phải sử dụng hàm copy chuỗi strcpy phía trong thư viện string.h nhằm lưu cực hiếm như sau:

// e.g about string - code by nguyenvanquan7826#include #include int main() char name<50>; strcpy(name, "Nguyen Van Quan"); puts(name); return 0;

3. Một vài ví dụ về chuỗi cam kết tự vào C


3.1 lấy một ví dụ 1: Đếm số từ trong chuỗi

Hãy nhập vào một chuỗi ký kết tự với đếm số từ trong chuỗi. VD chuỗi “Nguyen Van Quan” bao gồm 3 từ.

Để làm bài này, họ thấy từng từ là các ký tự thường xuyên nhau với phân tách các trường đoản cú bằng những dấu cách. Do thế bài này đã quy về đếm số dấu bí quyết trong chuỗi. Giả dụ chuỗi có một từ thì không tồn tại dấu cách, chuỗi bao gồm 2 từ thì có 1 dấu biện pháp giữa 2 trường đoản cú đó. Tổng quát là tất cả n từ bỏ thì sẽ có được n-1 vệt cách.

Vấn đề tiếp theo là làm sao đếm được những dấu cách? Đơn giản, như mở đầu ta sẽ biết chuỗi là một trong mảng những ký tự, bởi vì vậy bạn có thể duyệt lần lượt các ký tự của chuỗi nhằm kiếm tra ký kết tự nào là vệt cách. Nhưng ước ao duyệt hết những ký vào chuỗi (mảng ký kết tự) thì đề xuất biết con số ký tự bao gồm trong chuỗi (số lượng thành phần có trong mảng).

May mắn là trong tủ sách string.h chúng ta có một hàm để đưa độ dài của chuỗi là hàm strlen. (str – string, len – length).

// e.g about string - code by nguyenvanquan7826#include #include // for strlen functionint main() { char s<50>; printf("Enter a string: "); gets(s); int i, count = 0; // count - bien dem so luong dau cach for (i = 0; i Code khá đối kháng giản, các bạn đọc, đọc và demo nhé.

Tuy nhiên code trên bọn họ có một số trong những lưu ý:

Do chuỗi là 1 trong những mảng những ký tự, nên muốn lấy ký kết tự đồ vật i trong chuỗi s thì ta truy vấn như với mảng là s.Ví dụ này chỉ áp dụng khi chuỗi có độ dài lớn hơn 0 và không tồn tại dấu white thừa ở đầu, cuối hoặc giữa những từ.Như vòng lặp for sinh sống trên, họ có đk i , tuy nhiên bản chất của hàm strlen là một trong những vòng lặp nữa nhằm đếm con số ký từ của chuỗi s. Buộc phải nếu chúng ta viết trực tiếp điều kiện như trên thì trong mỗi lần lặp, chương trình lại đề nghị chạy lại lệnh strlen lặp để đếm số lượng ký tự của s. Điều này là thừa cùng làm chương trình chạy lâu hơn. Bởi vậy chúng ta sẽ đặt 1 biến đổi là độ dài của chuỗi ra phía bên ngoài như sau:

int len = strlen(s);for (i = 0; i

3.2 lấy ví dụ 2: chuẩn hóa chuỗi

Hãy nhập vào một trong những chuỗi với xóa bỏ toàn bộ các dấu biện pháp thừa nghỉ ngơi đầu, cuối cùng giữa những từ trường hợp có.

Xem thêm: Cách Up Video Lên Youtube Hd Lên Youtube Bằng Máy Tính, Điện Thoại

Bài toán này là bài bác toán đặc biệt quan trọng cho các phần mềm, về sau khi lưu lại trữ, nhập liệu cần xem xét để tài liệu được chuẩn, không thừa thiếu tạo sai sót trong quy trình xử lý cùng tím kiếm.

Ký tự thứ nhất của chuỗi s là dấu bí quyết thì s<0> là dấu cách, bọn họ xóa nó là xong.Các cam kết tự phương pháp giữa những từ giả dụ thừa có nghĩa là s cùng s thuộc là lốt cách. Chúng ta xóa 1 trong 2 là ok, vì các từ sẽ phân bóc tách nhau vị 1 dấu cách bắt buộc ta yêu cầu dữ lại 1 dấu cách.Các ký tự ngơi nghỉ cuối chuỗi là dấu giải pháp thì bọn họ sẽ xóa bằng cách gán cam kết tự cuối cùng là ký tự rỗng "" là xong. Lưu giữ rằng ký tự cuối cùng của mảng n phần tử là a, do vậy ký từ của chuỗi là s< strlen(s) - 1 >.

Vấn đề tiếp theo sau là làm sao xóa 1 cam kết tự vào chuỗi? các bạn nhìn lại lấy ví dụ như trên họ có sử dụng hàm copy chuỗi, cùng để xóa 1 hoặc một số trong những ký tự trong chuỗi chúng ta sẽ sử dụng hàm này tuy thế sẽ cần sử dụng theo copy địa chỉ.

Để xóa từ ký tự i đến ký kết tự j vào chuỗi s, bọn họ dùng lệnh strcpy(&s, &s);. Thực chất là chúng ta copy địa chỉ cửa hàng của s về showroom của s.

// e.g about string - code by nguyenvanquan7826#include #include int main() { char s<50>; printf("Enter a string: "); gets(s); // delete all space at start of string while( s<0> == ' ' ) strcpy(&s<0>, &s<1>); // delete all space at over of string while( s< strlen(s)-1 > == ' ') s< strlen(s)-1 > = ''; // delete all space between two word int i; for(i = 0; i Ok. Chúng ta chạy thử nhé. Ghi nhớ nhập chuỗi thừa các dấu giải pháp ở đầu, cuối, giữa để kiểm tra.

Một câu hỏi bé dại coi như bài xích tập có tác dụng thêm cho chúng ta là hãy nhìn cái code i--; // why??? và nghĩ lý do lại có dòng này? tại sao i phải giảm đi 1?

4. Một số hàm về chuỗi và ký tự

Int isalpha(int c) : soát sổ ký tự tất cả là vần âm không.Int isdigit(int c) : đánh giá xem cam kết tự bao gồm là chữ số không.Int islower(int c): chất vấn ký tự gồm là chữ thường không.Int isupper(int c): chất vấn ký tự gồm là chữ hoa không.Int ispace(int c): khám nghiệm ký tự gồm là trống không ( , lốt cách, ).

Các hàm sử lý xâu cam kết tự. (các hàm này nằm trong thư viện string.h)

Int strlen(char *s) trả về độ nhiều năm của xâu s;Char *strupr(char *s) đổi chữ thường trong xâu s lịch sự chữ hoa.Char *strlwr(char *s) thay đổi chữ hoa quý phái chữ thường.Char *strcat(char *s1, char *s2) nối xâu s2 vào xâu s1;Int strcmp(char *s1, char *s2) mang lại giá trị âm giả dụ xâu s1 nhở hơn xâu s2. Và mang lại giá ghen dương trường hợp xâu s1 to hơn xâu s2. Trả về giá chỉ trị bằng 0 giả dụ xâu s1 bằng xâu s2.Int strcmpi (char *s1, char *s2) đối chiếu 2 xâu mà lại không biệt lập chữ thường và chữ hoa.Char *strcpy(char *s1, char *s2) copy xâu s2 vào xâu s1.Char *strncpy(char *s1, char *s2, int n) sao chép n cam kết tự đầu của xâu s2 sang trọng xâu s1Char *strnset(char *s ,int c, int n) dùng để xào luộc n lần ký kết tự c vào xâu s.Char *strstr(char *s1, char *s2) tìm sự mở ra của xâu s2 trong xâu s1. Nếu tìm thấy hàm cho địa chỉ cửa hàng của xâu bé trong xâu s1. Trái lại cho NULL.Char *strrev(char *s) dùng đảo ngược xâu s.Nếu thành công xuất sắc hàm cho địa chỉ xâu đã đảo.

Bài tập

Viết chương trình tách tên xuất phát điểm từ một chuỗi cho trước. VD tên Nguyen Thi Lap Lanh => tách được LanhViết chương trình chuẩn chỉnh hóa chuỗi thương hiệu riêng. VD:ha noi => Ha Noi.Viết hàm biến hóa 1 chuỗi sang trọng chữ thường và 1 hàm đổi khác sang chữ HOA.Viết lịch trình nhập vào một chuỗi ký tự rồi đếm xem trong chuỗi đó có bao nhiêu chữ “ng”.Viết công tác nhập vào một chuỗi cam kết tự. Khám nghiệm xem chuỗi đó tất cả đối xứng không? Chuỗi đối xứng là chuỗi khi viết trái lại vẫn được như chuỗi ban đầu. VD levelViết công tác nhập vào số tất cả 3 chữ số. Cho thấy thêm dòng chữ biểu hiện giá trị con số đó. Ví dụ 123 -> một trăm nhì mươi ba.