So sánh chuỗi: Lập trình C

String Comparison C Programming



Chuỗi trong ngôn ngữ C là một mảng các ký tự, được kết thúc bằng ký tự rỗng ( 0). Sử dụng chuỗi thuộc tính này được so sánh.







Hai chuỗi có thể được so sánh theo nhiều cách khác nhau. Trong hướng dẫn này, trước tiên, chúng ta sẽ thấy một hàm do người dùng định nghĩa để so sánh hai chuỗi và sau đó chúng ta sẽ thấy một số hàm thư viện tích hợp có thể được sử dụng để so sánh hai chuỗi rất dễ dàng. Vậy hãy bắt đầu.



So sánh chuỗi bằng hàm do người dùng xác định:

Chúng tôi sẽ viết một hàm stringCompare () để so sánh các chuỗi. Chúng tôi duyệt qua các chuỗi và so sánh từng ký tự của chuỗi cho đến khi chúng tôi đến cuối của bất kỳ ký tự nào hoặc cả hai hoặc một ký tự không khớp được tìm thấy. Nếu quá trình truyền đạt đến cuối cả hai chuỗi, thì các chuỗi được khớp; nếu không, các chuỗi không khớp.



01./*userDefinedFunction.c*/
02.
03.#bao gồm
04.
05.NSstringCompare( charstr1[ ], charstr2[ ] )
06.{
07.NStôi=0;
08.
09. trong khi(str1[tôi] ==str2[tôi] )
10.
mười lăm.
16.nếu như(str1[tôi] == ' 0' &&str2[tôi] == ' 0' )
17.trở lại 0;
18.khác
19.trở lại -1;
hai mươi.
hai mươi mốt.}
22.
2. 3.
24.NSchủ chốt()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Nhập chuỗi đầu tiên:');
29. scanf ('% [^ ]% * NS ',str1);
30. printf ('Nhập chuỗi thứ hai:');
31. scanf ('% [^ ]% * NS ',str2);
32.
33.nếu như(stringCompare(str1,str2) == 0)
3. 4. printf ('Các chuỗi bằng nhau ');
35.khác
36. printf ('Các chuỗi không bằng nhau ');
37.
38.trở lại 0; 39.}





Ở đây chúng tôi duyệt qua các chuỗi bằng cách sử dụng vòng lặp while và một biến tôi . Khi các ký tự bằng nhau ở cùng một vị trí của cả hai chuỗi, giá trị của tôi được tăng thêm 1 (dòng 13). Nếu các ký tự không bằng nhau (dòng 09) hoặc chúng ta đến cuối chuỗi (dòng 11), thì vòng lặp while là ngắt. Sau vòng lặp while, chúng tôi kiểm tra cả hai chuỗi truyền tải có đến cuối hay không (dòng 16). Nếu đường truyền đạt đến cuối cả hai chuỗi, thì các chuỗi bằng nhau, ngược lại thì không.

So sánh chuỗi bằng cách sử dụng các hàm thư viện tích hợp sẵn:

Các hàm thư viện sau đây có thể được sử dụng để so sánh chuỗi. Tất cả các chức năng được khai báo trong string.h tập tin tiêu đề.



Hàm strcmp ():

Hàm này so sánh hai chuỗi được truyền vào hàm.

Cú pháp :

NS strcmp (hăng sô char *str1, hăng sô char *str2)

Giá trị trả lại: Trả về 0 nếu các chuỗi bằng nhau. Trả về số nguyên âm nếu giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên nhỏ hơn chuỗi thứ hai. Trả về một số nguyên dương nếu giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên lớn hơn chuỗi thứ hai. Một số hệ thống trả về chênh lệch giá trị ASCII của ký tự không khớp đầu tiên và một số hệ thống trả về -1 nếu giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên nhỏ hơn chuỗi thứ hai và trả về 1 nếu giá trị ASCII của ký tự không khớp đầu tiên của chuỗi đầu tiên lớn hơn chuỗi thứ hai.

Thí dụ Giá trị trả lại Giải trình
strcmp ( Xin chào Thế giới, Xin chào Thế giới ) 0 Hai chuỗi giống nhau.
strcmp ( Xin chào, Xin chào 0 Thế giới ) 0 Các chuỗi được so sánh với ký tự ‘ 0’. Theo mặc định, chuỗi đầu tiên kết thúc bằng ‘ 0’ và chuỗi thứ hai chứa ký tự ‘ 0’ sau ‘Hello’.
strcmp ( Xin chào 0 0 0 ″, Xin chào 0 Thế giới ) 0 Các chuỗi được so sánh với ký tự ‘ 0’.
strcmp ( Xin chào Thế giới, xin chào Thế giới ) Số nguyên âm Giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên (‘H’) nhỏ hơn chuỗi thứ hai (‘h’)
strcmp ( Xin chào Thế giới, Xin chào Thế giới ) Sô nguyên dương Giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên (‘h’) lớn hơn chuỗi thứ hai (‘H’)

Hàm strncmp ():

Hàm này tương tự như hàm strcmp () , nhưng ở đây chúng ta phải chỉ định có bao nhiêu byte được so sánh bằng cách truyền một đối số bổ sung cho hàm.

Cú pháp:

NS strncmp (hăng sô char *str1, hăng sô char *str2, size_tn)

Giá trị trả lại: Hàm trả về 0 nếu là người đầu tiên n ký tự của hai chuỗi bằng nhau; nếu không, nó trả về số nguyên âm hoặc dương tùy thuộc vào dấu hiệu của sự khác biệt giữa giá trị ASCII của ký tự không khớp đầu tiên.

Thí dụ Giá trị trả lại Giải trình
strncmp ( Xin chào Thế giới, Xin chào Thế giới, 5 ) 0 5 ký tự đầu tiên giống nhau.
strncmp ( Xin chào, Xin chào 0 Thế giới, 5 ) 0 5 ký tự đầu tiên giống nhau.
strncmp ( Xin chào 0 0 0 ″, Xin chào 0 Thế giới, 8 ) 0 ‘ 0’ nằm sau 5 ký tự đầu tiên trong cả hai chuỗi. Vì vậy, so sánh được dừng lại sau 5 chứ không phải 8.
strncmp ( Xin chào Thế giới, xin chào Thế giới, 5 ) Số nguyên âm Giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên (‘H’) nhỏ hơn chuỗi thứ hai (‘h’)

Hàm strcasecmp ():

Hàm này tương tự như hàm strcmp () , nhưng ở đây các chuỗi không phân biệt chữ hoa chữ thường.

Cú pháp:

NSstrcasecmp(hăng sô char *str1, hăng sô char *str2)

Giá trị trả lại: Giống như strcmp () , nhưng các chuỗi được coi là trường hợp không nhạy cảm .

Thí dụ Giá trị trả lại Giải trình
strcasecmp ( Xin chào Thế giới, Xin chào Thế giới ) 0 Hai chuỗi giống nhau.
strcasecmp ( Xin chào, Xin chào 0 Thế giới ) 0 Các chuỗi được so sánh với ký tự ‘ 0’. Theo mặc định, chuỗi đầu tiên kết thúc bằng ‘ 0’ và chuỗi thứ hai chứa ký tự ‘ 0’ sau ‘Hello’.
strcasecmp ( Xin chào Thế giới, xin chào Thế giới ) 0 Chuỗi là trường hợp không nhạy cảm. Vì vậy, Hello World và hello World đều giống nhau.

Hàm strncasecmp ():

Hàm này tương tự như hàm strncmp () , nhưng ở đây các chuỗi không phân biệt chữ hoa chữ thường.

Cú pháp:

NSstrncasecmp(hăng sô char *str1, hăng sô char *str2)

Giá trị trả lại: Giống như strncmp () , khi các chuỗi được coi là phân biệt chữ hoa chữ thường.

Thí dụ Giá trị trả lại Giải trình
strncasecmp ( Xin chào Thế giới, Xin chào Thế giới, 5 ) 0 5 ký tự đầu tiên giống nhau.
strncasecmp ( Xin chào, Xin chào 0 Thế giới, 5 ) 0 5 ký tự đầu tiên giống nhau.
strncasecmp ( Xin chào 0 0 0 ″, Xin chào 0 Thế giới, 8 ) 0 ‘ 0’ nằm sau 5 ký tự đầu tiên trong cả hai chuỗi. Vì vậy, so sánh được dừng lại sau 5 chứ không phải 8.
strncasecmp ( Xin chào Thế giới, xin chào Thế giới, 5 ) 0 Chuỗi là trường hợp không nhạy cảm. Vì vậy, Xin chào và xin chào giống nhau.

hàm memcmp ():

Hàm này so sánh hai khối bộ nhớ từng byte. Chúng ta phải chuyển hai con trỏ của khối bộ nhớ và số byte để so sánh.

Cú pháp:

NS memcmp (hăng sô vô hiệu *str1, hăng sô vô hiệu *str2, size_tn)

Giá trị trả lại: Hàm trả về 0 nếu hai khối bộ nhớ ( n byte) bằng nhau; nếu không, nó trả về sự khác biệt giữa cặp byte đầu tiên không khớp (byte được hiểu là đối tượng char không dấu, sau đó được thăng cấp thành int).

Thí dụ Giá trị trả lại Giải trình
memcmp ( Xin chào Thế giới, Xin chào Thế giới, 5 ) 0 5 ký tự đầu tiên giống nhau.
memcmp ( Xin chào 0 0 0 ″, Xin chào 0 Thế giới, 8 ) Số nguyên âm 6 ký tự đầu giống nhau, nhưng ký tự thứ 7 thì khác. Ở đây so sánh không dừng lại như strncmp () khi nhận được ký tự ‘ 0’.
memcmp ( Xin chào Thế giới, chào Thế giới, 11 ) Số nguyên âm Giá trị ASCII của ký tự chưa khớp đầu tiên của chuỗi đầu tiên (‘H’) nhỏ hơn chuỗi thứ hai (‘h’)

Thí dụ:

Sau đây là ví dụ mã C của tất cả các chức năng được thảo luận.

01./*stringCompare.c*/
02.
03.#bao gồm
04.#bao gồm
05.
06.NSchủ chốt()
07.{
08. printf ('strcmp ('Chào thế giới','Chào thế giới') =>% d ', strcmp ( 'Chào thế giới','Chào thế giới' ));
09. printf ('strcmp ('xin chào','Xin chào\0Thế giới') =>% d ', strcmp ( 'Xin chào','Xin chào 0Thế giới' ));
10. printf ('strcmp ('Chào thế giới','Chào thế giới') =>% d ', strcmp ( 'Chào thế giới','Chào thế giới' ) );
mười một. printf ('strcmp ('Xin chào\0\0\0','Xin chào\0Thế giới') =>% d ', strcmp ( 'Xin chào 0 0 0','Xin chào 0Thế giới' ));
12.
13. printf (' --------------- ');
14.
mười lăm. printf ('strncmp ('Chào thế giới','Chào thế giới', 5) =>% d ', strncmp ( 'Chào thế giới','Chào thế giới',5 ));
16. printf ('strncmp ('xin chào','Xin chào\0Thế giới', 5) =>% d ', strncmp ( 'Xin chào','Xin chào 0Thế giới',5 ));
17. printf ('strncmp ('Xin chào\0\0\0','Xin chào\0Thế giới', 8) =>% d ', strncmp ( 'Xin chào 0 0 0','Xin chào 0Thế giới',số 8 ));
18. printf ('strncmp ('Chào thế giới','Chào thế giới', 5) =>% d ', strncmp ( 'Chào thế giới','Chào thế giới',5 ));
19.
hai mươi. printf (' --------------- ');
hai mươi mốt.
22. printf ('strcasecmp ('Chào thế giới','Chào thế giới') =>% d ',strcasecmp( 'Chào thế giới','Chào thế giới' ));
2. 3. printf ('strcasecmp ('xin chào','Xin chào\0Thế giới') =>% d ',strcasecmp( 'Xin chào','Xin chào 0Thế giới' ));
24. printf ('strcasecmp ('Chào thế giới','Chào thế giới') =>% d ',strcasecmp( 'Chào thế giới','Chào thế giới' ));
25.
26. printf (' --------------- ');
27.
28. printf ('strncasecmp ('Chào thế giới','Chào thế giới', 5) =>% d ',strncasecmp( 'Chào thế giới','Chào thế giới',5 ) );
29. printf ('strncasecmp ('xin chào','Xin chào\0Thế giới', 5) =>% d ',strncasecmp( 'Xin chào','Xin chào 0Thế giới',5 ));
30. printf ('strncasecmp ('Xin chào\0\0\0','Xin chào\0Thế giới', 8) =>% d ',strncasecmp( 'Xin chào 0 0 0','Xin chào 0Thế giới',số 8 ));
31. printf ('strncasecmp ('Chào thế giới','Chào thế giới', 5) =>% d ',strncasecmp( 'Chào thế giới','Chào thế giới',5 ));
32.
33. printf (' --------------- ');
3. 4.
35. printf ('memcmp ('Chào thế giới','Chào thế giới', 5) =>% d ', memcmp ( 'Chào thế giới','Chào thế giới',5 ) );
36. printf ('memcmp ('Xin chào\0\0\0','Xin chào\0Thế giới', 8) =>% d ', memcmp ( 'Xin chào 0 0 0','Xin chào 0Thế giới',số 8 ));
37. printf ('memcmp ('Chào thế giới','Chào thế giới', 11) =>% d ', memcmp ( 'Chào thế giới','Chào thế giới',mười một ));
38.
39.trở lại 0; 40.}

Phần kết luận:

Vì vậy, trong hướng dẫn này, chúng ta đã thấy cách các chuỗi có thể được so sánh theo nhiều cách khác nhau. Như chúng ta đã thấy, hàm stringCompare () trả về -1 cho các chuỗi không bằng nhau, nhưng điều này có thể được sửa đổi để nó trả về giá trị ASCII của ký tự không khớp. Bạn có thể sử dụng nó trong mã của mình, mã này phù hợp nhất với bạn.