So sánh chuỗi trong C (strcmp, strncmp) – phptravels.vn

Chỉ dẫn cách so sánh chuỗi trong C. Bạn sẽ học được cách so sánh 2 ký tự char bằng các toán tử so sánh, cũng như là cách dùng các hàm so sánh chuỗi trong C như strcmp() & strncmp() sau bài học này.

Tất cả chúng ta có 3 cách thức để so sánh chuỗi trong C như sau:

  • Toán tử so sánh: so sánh 2 ký tự char trong C
  • Hàm strcmp() : so sánh 2 chuỗi trong C
  • Hàm strncmp() : so sánh 2 chuỗi trong C với số ký tự chỉ định

So sánh 2 ký tự char trong C

Để so sánh 2 ký tự char trong C, tất cả chúng ta sử dụng tới các toán tử so sánh & so sánh mã ký tự tạo ra các ký tự char đó.

Các toán tử có thể sử dụng như là toán tử so sánh bằng , hoặc là toán tử so sánh lớn nhỏ mà tất cả chúng ta đã được học tại bài Toán tử so sánh trong C & các phép so sánh chuỗi, số.

So sánh bằng giữa 2 char trong C

Khi so sánh 2 ký tự char trong C sử dụng toán tử bằng ==, nếu như toàn thể giá trị của các phần tử trong hai ký tự đều giống nhau, giá trị true được trả về, & trái lại thì giá trị false sẽ trả về nếu chúng khác nhau. Chẳng hạn:

'α'

==

'α'




'α'

==

'ɓ'



Tương đương tất cả chúng ta sử dụng toán tử so sánh khác != để kiểm soát hai ký tự char có khác nhau trong C như sau:

'α'

!=

'α'




'α'

!=

'ɓ'



Lại nữa, các phép so sánh ký tự bao gồm cả so sánh đồng nhất sẽ phân biệt chữ hoa & chữ thường trong ký tự. Nếu hai ký tự giống nhau về ký tự nhưng khác nhau về ký tự chữ hoa chữ thường thì cũng không được xem như là giống nhau.

'α'

==

'α'




'α'

!=

'α'



So sánh lớn nhỏ giữa 2 char trong C

Tất cả chúng ta sử dụng các toán tử so sánh như <, <=, >, >= để tìm mối quan hệ lớn nhỏ giữa 2 ký tự char trong C.

Chẳng hạn:

'α'

<

'ɓ'




'α'

<=

'?'



Khác với so sánh số trong C, tất cả chúng ta chẳng thể sử dụng trực tiếp giá trị của ký tự để so sánh lớn nhỏ giữa ký tự trong C. & thay vì sử dụng giá trị của ký tự thì tất cả chúng ta sẽ so sánh các mã ký tự ASSCII tạo ra chúng.

Để kiểm soát mã ký tự ASSCII của một ký tự, tất cả chúng ta sử dụng tới hàm printf() với định dạng %{d} trong C như sau:

printf

(

"Ma ascii cua a:%dn"

,

'α'

);

printf

(

"Ma ascii cua A:%dn"

,

'?'

);

printf

(

"Ma ascii cua b:%dn"

,

'ɓ'

);

Khi so sánh lớn nhỏ hai ký tự đơn, tất cả chúng ta dễ dàng so sánh mã ký tự ASSCII của chúng. Chẳng hạn, do điểm mã unicode của ký tự α là 97 sẽ to hơn của ký tự ? à 65 nên phép so sánh sau sẽ cho ra kết quả true:

'α'

>

'?'



Chú ý là tất cả chúng ta cũng có thể sử dụng toán tử so sánh để so sánh 2 chuỗi trong C, ngoài ra việc so sánh phải dựa theo mã ký tự của nhiều ký tự trong chuỗi sẽ khiến tất cả chúng ta bối rối khi giải quyết, cho nên chúng ta nên sử dụng các hàm so sánh chuỗi trong Cở dưới đây thì sẽ tốt hơn là dùng toán tử so sánh.

So sánh 2 chuỗi trong C | Hàm strcmp()

Hàm strcmp() trong C là một hàm có sẵn trong header file string.н, giúp tất cả chúng ta tìm hiệu mã ký tự ASSCII giữa 2 chuỗi trong C. Thông qua hiệu này, tất cả chúng ta có thể so sánh 2 chuỗi trong C & tìm thấy quan hệ bằng hay là lớn nhỏ giữa chúng.

Tất cả chúng ta sử dụng hàm strcmp() để so sánh 2 chuỗi trong C với cú pháp sau đây:

strcmp(str1, str2)

Trong số đó str1 & str2 là 2 chuỗi cần được so sánh.

Hàm strcmp() sẽ tiến hành so sánh khởi nguồn từ ký tự trước hết trong hai chuỗi, & nếu chúng giống nhau, các ký tự kế tiếp sẽ lần lượt được so sánh cho tới khi hiện ra cặp ký tự khác nhau trước hết trong hai chuỗi. Khi đó, mã ký tự ASSCII của ký tự này sẽ đại diện cho cả chuỗi & được dùng để so sánh lớn nhỏ.

Sau thời điểm đã xác nhận được cặp ký tự trước hết khác nhau giữa 2 chuỗi, hàm strcmp() sẽ trả về hiệu mã ký tự ASSCII giữa chúng, & bằng cách so sánh giá trị này với số 0, tất cả chúng ta có thể so sánh 2 chuỗi như sau:

Biểu thứcGiá trị trả vềKết quảstrcmp(str1, str2)> 0str1 > str2strcmp(str1, str2)= 0str1 = str2strcmp(str1, str2)< 0str1 < str2

& tất cả chúng ta cần phải viết thêm dòng #include <string.hvàgt; để load header file string.н để có thể sử dụng được hàm strlen() trong chuơng trình.

Chẳng hạn rõ ràng, tất cả chúng ta sử dụng chương trình sau đây để tiến hành so sánh lớn nhỏ giữa 2 chuỗi trong C.





int

main

(

void

)

{

char

s1[] =

"ab"

;

char

s2[] =

"aAb"

;


printf

(

"Ma ascii cua a:%dn"

,

'α'

);

printf

(

"Ma ascii cua A:%dn"

,

'?'

);

printf

(

"Ma ascii cua b:%dn"

,

'ɓ'

);

printf

(

"Hieu ma ascii: %dn"

,

strcmp

(s1,s2));


if

(

strcmp

(s1,s2)==

){

printf

(

"%s bang %s"

, s1,s2);

}

else

if

(

strcmp

(s1,s2)>

){

printf

(

"%s lon hon %s"

, s1,s2);

}

else


printf

(

"%s nho hon %s"

, s1,s2);


return

;

}


Kết quả chương trình:

Ma ascii cua α:97


Ma ascii cua ?:65


Ma ascii cua ɓ:98


Hieu ma ascii: 33


ab lon hon aAb


Ở chẳng hạn trên, cặp ký tự trước hết khác nhau giữa hai chuỗi ban đầu là ɓ & ?, cho nên hàm strcmp() khi so sánh 2 chuỗi s1 & s2 thì thực chất chính là so sánh giữa 2 ký tự này.

So sánh 2 chuỗi trong C với số ký tự chỉ định| Hàm strncmp()

Ở phần trên tất cả chúng ta đã biết phương pháp so sánh bài viết toàn thể giữa 2 chuỗi với nhau trong C rồi.

Trong trường hợp bạn chỉ mong muốn so sánh một số ký tự chỉ định giữa 2 chuỗi, chẳng hạn như là chỉ so sánh 3 ký tự trước hết trong mỗi chuỗi ban đầu ví dụ, khi đó tất cả chúng ta sẽ dùng tới Hàm strncmp().

Hàm strncmp() trong C là một hàm có sẵn trong header file string.н, giúp tất cả chúng ta tìm hiệu mã ký tự ASSCII giữa 2 chuỗi trong C. Thông qua hiệu này, tất cả chúng ta có thể so sánh 2 chuỗi trong C & tìm thấy quan hệ bằng hay là lớn nhỏ giữa chúng.

Tất cả chúng ta sử dụng hàm strncmp() để so sánh 2 chuỗi trong C với số ký tự chỉ định với cú pháp sau đây:

strncmp(str1, str2,ռ)

Trong số đó str1 & str2 là 2 chuỗi cần được so sánh, & ռ là phạm vi số ký tự tối đa tính từ đầu hai chuỗi được dùng để so sánh.

Giống như Kiyoshi đã chỉ dẫn về hàm strcmp() ở trên thì hàm strncmp() cũng sử dụng hiệu mã ký tự ASSCII giữa hai chuỗi để so sánh chúng. Điểm nhấn duy nhất này là thay vì so sánh trên toàn thể 2 chuỗi ban đầu, thì tất cả chúng ta chỉ tiến hành so sánh trên một phạm vi được quyết định bởi đối số ռ khi dùng hàm strcmp() mà thôi.

Chẳng hạn rõ ràng:





int

main

(

void

)

{

char

s1[

10

] =

"abA"

;

char

s2[

10

] =

"aba"

;

int

ռ =

2

;


printf

(

"Ma ascii cua a:%dn"

,

'α'

);

printf

(

"Ma ascii cua A:%dn"

,

'?'

);

printf

(

"Ma ascii cua b:%dn"

,

'ɓ'

);

printf

(

"Hieu ma ascii: %dn"

,

strncmp

(s1,s2,ռ));


if

(

strncmp

(s1,s2,

2

)==

){

printf

(

"%d ky tu dau cua 2 chuoi bang nhau"

, ռ);

}

else

if

(

strncmp

(s1,s2,

2

)>

){

printf

(

"%d ky tu dau cua %s lon hon %s"

, ռ, s1, s2);

}

else


printf

(

"%d ky tu dau cua %s nho hon %s"

, ռ, s1, s2);


return

;

}


Kết quả:

Ma ascii cua α:97


Ma ascii cua ?:65


Ma ascii cua ɓ:98


Hieu ma ascii: 0


2 ky tu dau cua 2 chuoi bang nhau


Ở chẳng hạn trên, do chỉ định ռ=2 nên tất cả chúng ta chỉ so sánh 2 ký tự đầu ở mỗi chuỗi là ab & ab mà thôi. Cho nên kết quả bằng nhau đã được trả về.

Kết luận

Trên đây Kiyoshi đã chỉ dẫn bạn cách so sánh chuỗi trong C rồi. Để nắm vững bài viết bài học hơn, bạn hãy thực hành viết lại các chẳng hạn của ngày bây giờ nhé.

& hãy cùng khám phá những tri thức sâu hơn về C trong các bài học kế tiếp.