Perbandingan Rentetan: Pengaturcaraan C

String Comparison C Programming



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. Jadi, 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 yang tidak sesuai dijumpai. Sekiranya traversal dicapai ke hujung kedua rentetan, maka rentetan itu dipadankan; jika tidak, rentetan tidak sesuai.



01./*userDefinedFungsi.c*/
02.
03.#sertakan
04.
05.inttaliBandingkan( charstr1[ ], charstr2[ ] )
06.{
07.inti=0;
08.
09. sementara(str1[i] ==str2[i] )
10.
lima belas.
16.sekiranya(str1[i] == ' 0' &&str2[i] == ' 0' )
17.kembali 0;
18.yang lain
19.kembali -1;
dua puluh.
dua puluh satu.}
22.
2. 3.
24.intutama()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Masukkan rentetan pertama:');
29. imbasan ('% [^ n]% * c ',str1);
30. printf ('Masukkan rentetan kedua:');
31. imbasan ('% [^ n]% * c ',str2);
32.
33.sekiranya(taliBandingkan(str1,str2) == 0)
3. 4. printf ('Tali itu sama n');
35.yang lain
36. printf ('Tali itu tidak sama n');
37.
38.kembali 0; 39.}





Di sini kita melintasi rentetan menggunakan while loop dan pemboleh ubah i . Apabila watak sama pada kedudukan yang sama dari kedua rentetan, nilai i ditingkatkan oleh 1 (baris 13). Sekiranya watak tidak sama (baris 09) atau kita mencapai hujung 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 (penyambung char *str1, penyambung 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 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 rentetan pertama lebih besar daripada rentetan kedua.

Contohnya Nilai Pulangan Penjelasan
strcmp ( Hello World, Hello World ) 0 Dua tali adalah sama.
strcmp ( Helo, Hello 0 Dunia ) 0 Rentetan dibandingkan hingga watak ' 0'. Rentetan pertama secara lalai berakhir dengan ‘ 0’, dan rentetan kedua mengandungi watak ‘ 0’ selepas ‘Hello’.
strcmp ( Helo 0 0 0 ″, Helo 0 Dunia ) 0 Rentetan dibandingkan hingga 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 pertama yang tidak dapat ditandingi dari rentetan pertama (‘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 (penyambung char *str1, penyambung char *str2, saiz_tn)

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 sepadan.

Contohnya Nilai Pulangan Penjelasan
strncmp ( Hello World, Hello World, 5 ) 0 5 watak pertama adalah sama.
strncmp ( Helo, Hello 0 Dunia, 5 ) 0 5 watak pertama adalah sama.
strncmp ( Helo 0 0 0 ″, Helo 0 Dunia, 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:

intstrcasecmp(penyambung char *str1, penyambung 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 ( Helo, Hello 0 Dunia ) 0 Rentetan dibandingkan hingga 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:

intstrncasecmp(penyambung char *str1, penyambung 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 ( Helo, Hello 0 Dunia, 5 ) 0 5 watak pertama adalah sama.
strncasecmp ( Helo 0 0 0 ″, Helo 0 Dunia, 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 dengan bait. Kita mesti lulus dua titik blok memori dan bilangan bait untuk dibandingkan.

Sintaks:

int memcmp (penyambung batal *str1, penyambung batal *str2, saiz_tn)

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 ( Helo 0 0 0 ″, Helo 0 Dunia, 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./*stringCompare.c*/
02.
03.#sertakan
04.#sertakan
05.
06.intutama()
07.{
08. printf ('strcmp ('Hai dunia','Hai dunia') =>% d n', strcmp ( 'Hai dunia','Hai dunia' ));
09. printf ('strcmp ('Helo','Helo \0Dunia') =>% d n', strcmp ( 'Helo','Helo 0Dunia ' ));
10. printf ('strcmp ('Hai dunia','Hai dunia') =>% d n', strcmp ( 'Hai dunia','Hai dunia' ) );
sebelas. printf ('strcmp ('Helo \0\0\0','Helo \0Dunia') =>% d n', strcmp ( 'Helo 0 0 0','Helo 0Dunia ' ));
12.
13. printf (' n--------------- n');
14.
lima belas. printf ('strncmp ('Hai dunia','Hai dunia', 5) =>% d n', strncmp ( 'Hai dunia','Hai dunia',5 ));
16. printf ('strncmp ('Helo','Helo \0Dunia', 5) =>% d n', strncmp ( 'Helo','Helo 0Dunia ',5 ));
17. printf ('strncmp ('Helo \0\0\0','Helo \0Dunia', 8) =>% d n', strncmp ( 'Helo 0 0 0','Helo 0Dunia ',8 ));
18. printf ('strncmp ('Hai dunia','Hai dunia', 5) =>% d n', strncmp ( 'Hai dunia','Hai dunia',5 ));
19.
dua puluh. printf (' n--------------- n');
dua puluh satu.
22. printf ('strcasecmp ('Hai dunia','Hai dunia') =>% d n',strcasecmp( 'Hai dunia','Hai dunia' ));
2. 3. printf ('strcasecmp ('Helo','Helo \0Dunia') =>% d n',strcasecmp( 'Helo','Helo 0Dunia ' ));
24. printf ('strcasecmp ('Hai dunia','Hai dunia') =>% d n',strcasecmp( 'Hai dunia','Hai dunia' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Hai dunia','Hai dunia', 5) =>% d n',strncasecmp( 'Hai dunia','Hai dunia',5 ) );
29. printf ('strncasecmp ('Helo','Helo \0Dunia', 5) =>% d n',strncasecmp( 'Helo','Helo 0Dunia ',5 ));
30. printf ('strncasecmp ('Helo \0\0\0','Helo \0Dunia', 8) =>% d n',strncasecmp( 'Helo 0 0 0','Helo 0Dunia ',8 ));
31. printf ('strncasecmp ('Hai dunia','Hai dunia', 5) =>% d n',strncasecmp( 'Hai dunia','Hai dunia',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Hai dunia','Hai dunia', 5) =>% d n', memcmp ( 'Hai dunia','Hai dunia',5 ) );
36. printf ('memcmp ('Helo \0\0\0','Helo \0Dunia', 8) =>% d n', memcmp ( 'Helo 0 0 0','Helo 0Dunia ',8 ));
37. printf ('memcmp ('Hai dunia','Hai dunia', 11) =>% d n', memcmp ( 'Hai dunia','Hai dunia',sebelas ));
38.
39.kembali 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 watak yang tidak sesuai. Anda boleh menggunakannya dalam kod anda, yang paling sesuai untuk anda.