Pengaturcaraan C

Pengaturcaraan String Comparison C

Pengaturcaraan String Comparison C
Rentetan dalam bahasa C adalah susunan aksara, yang diakhiri dengan watak nol (\ 0). Menggunakan rentetan harta ini dibandingkan.

Dua tali boleh dibandingkan dengan pelbagai cara. Dalam tutorial ini, pertama, kita akan melihat fungsi yang ditentukan pengguna untuk membandingkan dua rentetan, dan kemudian kita akan melihat beberapa fungsi perpustakaan terbina dalam yang dapat digunakan untuk membandingkan dua rentetan dengan sangat mudah. Oleh itu, mari kita mulakan.

Perbandingan rentetan menggunakan fungsi yang ditentukan pengguna:

Kami akan menulis fungsi rentetanBandingkan () untuk membandingkan rentetan. Kami melintasi rentetan dan membandingkan setiap watak rentetan sehingga kita mencapai akhir salah satu atau kedua-duanya atau satu tidak sepadan dijumpai. Sekiranya persimpangan dicapai ke hujung kedua rentetan, maka rentetan itu dipadankan; jika tidak, rentetan tidak sesuai.

01. / * userDefinedFungsi.c * /
02.
03. #sertakan
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. sementara (str1 [i] == str2 [i])
10.
11. jika (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. rehat;
13. saya ++;
14.
15.
16. jika (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. pulangan 0;
18. yang lain
19. pulangan -1;
20.
21.
22.
23.
24. int utama ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Masukkan rentetan pertama:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Masukkan rentetan kedua:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. jika (stringCompare (str1, str2) == 0)
34. printf ("Rentetan sama \ n");
35. yang lain
36. printf ("Rentetan tidak sama \ n");
37.
38. pulangan 0; 39.

Di sini kita melintasi rentetan menggunakan loop sementara dan pemboleh ubah i. Apabila watak sama pada kedudukan yang sama dari kedua rentetan, nilai i meningkat oleh 1 (baris 13). Sekiranya watak tidak sama (baris 09) atau kita mencapai akhir rentetan (baris 11), maka gelung sementara adalah penembusan. Selepas gelung sementara, kami periksa kedua-dua rentetan rentetan sampai ke hujung atau tidak (baris 16). Sekiranya traversal dicapai ke hujung kedua rentetan, maka rentetan sama dengan sebaliknya.

Perbandingan rentetan menggunakan fungsi perpustakaan terbina dalam:

Fungsi perpustakaan berikut boleh digunakan untuk perbandingan rentetan. Semua fungsi dinyatakan dalam tali.h fail pengepala.

fungsi strcmp ():

Fungsi ini membandingkan dua rentetan yang diteruskan ke fungsi tersebut.

Sintaks:

int strcmp (const char * str1, const char * str2)

Nilai pulangan: Kembalikan 0 jika rentetan sama. Kembalikan bilangan bulat negatif jika nilai ASCII watak pertama yang tidak dapat ditandingi rentetan pertama kurang daripada rentetan kedua. Kembalikan bilangan bulat positif jika nilai ASCII dari watak pertama yang tidak dapat ditandingi dari rentetan pertama lebih besar daripada rentetan kedua. Beberapa sistem mengembalikan perbezaan nilai ASCII watak pertama yang tidak sepadan dan beberapa sistem mengembalikan -1 jika nilai ASCII watak pertama yang tidak dapat ditandingi rentetan pertama kurang daripada rentetan kedua dan mengembalikan 1 jika nilai ASCII dari watak pertama yang tidak sesuai tali pertama lebih besar daripada rentetan kedua.

Contohnya Nilai Pulangan Penjelasan
strcmp ( "Hello World", "Hello World" ) 0 Dua tali adalah sama.
strcmp ( "Hello", "Hello \ 0 World" ) 0 Rentetan dibandingkan sehingga watak '\ 0'. Rentetan pertama secara lalai berakhir dengan '\ 0', dan rentetan kedua mengandungi watak '\ 0' setelah 'Hello'.
strcmp ( "Helo \ 0 \ 0 \ 0", "Helo \ 0 Dunia" ) 0 Rentetan dibandingkan sehingga watak '\ 0'.
strcmp ( "Hello World", "hello World" ) Bilangan bulat negatif Nilai ASCII bagi watak rentak pertama yang tidak dapat ditandingi ('H') kurang daripada rentetan kedua ('h')
strcmp ("Hello World", "Hello World" ) Bilangan bulat positif Nilai ASCII bagi watak rentak pertama yang tidak dapat ditandingi ('h') lebih besar daripada rentetan kedua ('H')

fungsi strncmp ():

Fungsi ini serupa dengan fungsi strcmp (), tetapi di sini kita harus menentukan berapa banyak bait dibandingkan dengan menyampaikan argumen tambahan ke fungsi.

Sintaks:

int strncmp (const char * str1, const char * str2, size_t n)

Nilai pulangan: Fungsi kembali 0 sekiranya yang pertama n watak dari dua rentetan itu sama; jika tidak, ia mengembalikan bilangan bulat negatif atau positif bergantung pada tanda perbezaan antara nilai ASCII watak pertama yang tidak sesuai.

Contohnya Nilai Pulangan Penjelasan
strncmp ( "Hello World", "Hello World", 5 ) 0 5 watak pertama adalah sama.
strncmp ( "Hello", "Hello \ 0 World", 5 ) 0 5 watak pertama adalah sama.
strncmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) 0 '\ 0' adalah selepas 5 aksara pertama dalam kedua-dua rentetan. Jadi, perbandingan dihentikan selepas 5 bukan 8.
strncmp ( "Hello World", "hello World", 5 ) Bilangan bulat negatif Nilai ASCII bagi watak rentak pertama yang tidak dapat ditandingi ('H') kurang daripada rentetan kedua ('h')

fungsi strcasecmp ():

Fungsi ini serupa dengan fungsi strcmp (), tetapi di sini rentetannya tidak peka huruf besar-kecil.

Sintaks:

int strcasecmp (const char * str1, const char * str2)

Nilai pulangan: Sama seperti strcmp (), tetapi tali diperlakukan sebagai kes-sensitif.

Contohnya Nilai Pulangan Penjelasan
strcasecmp ( "Hello World", "Hello World" ) 0 Dua tali adalah sama.
strcasecmp ( "Hello", "Hello \ 0 World" ) 0 Rentetan dibandingkan sehingga watak '\ 0'. Rentetan pertama secara lalai berakhir dengan '\ 0', dan rentetan kedua mengandungi watak '\ 0' selepas 'Hello'.
strcasecmp ( "Hello World", "hello World" ) 0 Rentetan adalah kes-sensitif. Jadi, "Hello World" dan "hello World" adalah sama.

fungsi strncasecmp ():

Fungsi ini serupa dengan fungsi strncmp (), tetapi di sini rentetannya tidak peka huruf besar-kecil.

Sintaks:

int strncasecmp (const char * str1, const char * str2)

Nilai pulangan: Sama seperti strncmp (), apabila tali diperlakukan sebagai peka huruf besar-kecil.

Contohnya Nilai Pulangan Penjelasan
strncasecmp ( "Hello World", "Hello World", 5 ) 0 5 watak pertama adalah sama.
strncasecmp ( "Hello", "Hello \ 0 World", 5 ) 0 5 watak pertama adalah sama.
strncasecmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) 0 '\ 0' adalah selepas 5 aksara pertama dalam kedua-dua rentetan. Jadi, perbandingan dihentikan selepas 5 bukan 8.
strncasecmp ( "Hello World", "hello World", 5 ) 0 Rentetan adalah kes-sensitif. Jadi, "Hello" dan "hello" adalah sama.

fungsi memcmp ():

Fungsi ini membandingkan dua blok memori byte oleh bait. Kita mesti lulus dua titik blok memori dan bilangan bait untuk dibandingkan.

Sintaks:

int memcmp (const void * str1, const void * str2, size_t n)

Nilai pulangan: Fungsi mengembalikan 0 jika dua blok memori (n bait) sama; jika tidak, ia mengembalikan perbezaan antara pasangan byte pertama yang tidak sesuai (byte ditafsirkan sebagai objek char yang tidak ditandatangani, kemudian dipromosikan ke int).

Contohnya Nilai Pulangan Penjelasan
memcmp ( "Hello World", "Hello World", 5 ) 0 5 watak pertama adalah sama.
memcmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) Bilangan bulat negatif 6 watak pertama adalah sama, tetapi watak ke-7 berbeza. Di sini perbandingan tidak berhenti seperti strncmp () semasa mendapat watak '\ 0'.
memcmp ( "Hello World", "hello World", 11 ) Bilangan bulat negatif Nilai ASCII bagi watak rentak pertama yang tidak dapat ditandingi ('H') kurang daripada rentetan kedua ('h')

Contoh:

Berikut adalah contoh kod C dari semua fungsi yang dibincangkan.

01. / * stringBandingkan.c * /
02.
03. #sertakan
04. #sertakan
05.
06. int utama ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello", "Hello \ 0 World"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello \ 0 \ 0 \ 0", "Helo \ 0 Dunia "));
12.
13. printf ("\ n --------------- \ n");
14.
15. printf ("strncmp (" Hello World "," Hello World ", 5) =>% d \ n", strncmp ("Hello World", "Hello World", 5));
16. printf ("strncmp (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncmp ("Hello", "Hello \ 0 World", 5));
17. printf ("strncmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Helo \ 0 Dunia ", 8));
18. printf ("strncmp (" Hello World "," hello World ", 5) =>% d \ n", strncmp ("Hello World", "hello World", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcasecmp ("Hello", "Hello \ 0 World"));
24. printf ("strcasecmp (" Hello World "," hello World ") =>% d \ n", strcasecmp ("Hello World", "hello World"));
25.
26. printf ("\ n --------------- \ n");
27.
28. printf ("strncasecmp (" Hello World "," Hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "Hello World", 5));
29. printf ("strncasecmp (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncasecmp ("Hello", "Hello \ 0 World", 5));
30. printf ("strncasecmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Helo \ 0 Dunia ", 8));
31. printf ("strncasecmp (" Hello World "," hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "hello World", 5));
32.
33. printf ("\ n --------------- \ n");
34.
35. printf ("memcmp (" Hello World "," Hello World ", 5) =>% d \ n", memcmp ("Hello World", "Hello World", 5));
36. printf ("memcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", memcmp ("Hello \ 0 \ 0 \ 0", "Helo \ 0 Dunia ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. pulangan 0; 40.

Kesimpulan:

Oleh itu, dalam tutorial ini, kita telah melihat bagaimana rentetan dapat dibandingkan dengan pelbagai cara. Seperti yang telah kita lihat, fungsi stringCompare () mengembalikan -1 untuk rentetan yang tidak sama, tetapi ini dapat diubah sehingga mengembalikan nilai ASCII dari karakter yang tidak sesuai. Anda boleh menggunakannya dalam kod anda, yang paling sesuai untuk anda.

Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah penambahan kedua belas untuk siri Tomb Raider - francais permainan aksi-pengembaraan yang dibuat oleh Eidos Montreal....
Cara Meningkatkan FPS di Linux?
FPS bermaksud Bingkai sesaat. Tugas FPS adalah mengukur kadar bingkai dalam pemutaran video atau persembahan permainan. Dengan kata mudah bilangan gam...
Permainan Makmal Apl Oculus Teratas
Sekiranya anda adalah pemilik alat dengar Oculus, maka anda mesti mengetahui tentang memuatkan sideload. Sideloading adalah proses memasang kandungan ...