השוואת מחרוזות: תכנות C

String Comparison C Programming



מחרוזת בשפת C היא מערך של תווים, המסתיים עם תו null ( 0). השימוש במאפיין זה מושווה.







ניתן להשוות שני מחרוזות בדרכים שונות. במדריך זה, ראשית, נראה פונקציה המוגדרת על ידי המשתמש להשוואת שתי מחרוזות, ולאחר מכן נראה כמה פונקציות ספרייה מובנות שניתן להשתמש בהן להשוות שתי מחרוזות בקלות רבה. אז בואו נתחיל.



השוואת מחרוזות באמצעות פונקציה המוגדרת על ידי המשתמש:

נכתוב פונקציה stringCompare () להשוואת מחרוזות. אנו חוצים את המיתרים ומשווים כל תו של המחרוזת עד שאנו מגיעים לסוף כל אחד מהם או שניהם או שאינם תואמים. אם מגיעים לחצייה עד לסוף שתי המיתרים, הרי שהמחרוזות מותאמות; אחרת, מחרוזות אינן תואמות.



01./*userDefinedFunction.c*/
02.
03.#לִכלוֹל
04.
05.intstringCompare( לְהַשְׁחִירstr1[ ], לְהַשְׁחִירstr2[ ] )
06.{
07.intאני=0;
08.
09. בזמן(str1[אני] ==str2[אני] )
10.
חֲמֵשׁ עֶשׂרֵה.
16.אם(str1[אני] == ' 0' &&str2[אני] == ' 0' )
17.לַחֲזוֹר 0;
18.אַחֵר
19.לַחֲזוֹר -1;
עשרים.
עשרים ואחת.}
22.
2. 3.
24.intרָאשִׁי()
25.{
26.לְהַשְׁחִירstr1[30],str2[30];
27.
28. printf ('הזן את המחרוזת הראשונה:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('הזן את המחרוזת השנייה:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.אם(stringCompare(str1,str2) == 0)
3. 4. printf ('המיתרים שווים n');
35.אַחֵר
36. printf (״המחרוזות אינן שוות n');
37.
38.לַחֲזוֹר 0; 39.}





כאן אנו חוצים את המיתרים באמצעות לולאת while ומשתנה אני . כאשר התווים שווים באותו המיקום של שתי המחרוזות, הערך של אני הוא מוגבר ב- 1 (שורה 13). אם התווים אינם שווים (שורה 09) או שאנו מגיעים לסוף המחרוזת (שורה 11), אז לולאת ה- while היא הפסקה. לאחר לולאת ה- while, אנו בודקים ששתי מעברי המיתרים מגיעים עד הסוף או לא (שורה 16). אם מגיעים לחצייה עד לסוף שתי המיתרים, אז המיתרים שווים אחרת לא.

השוואת מחרוזות באמצעות פונקציות ספרייה מובנות:

ניתן להשתמש בפונקציות הספרייה הבאות להשוואת מחרוזות. כל הפונקציות מוצהרות ב- string.h קובץ הכותרת.



הפונקציה strcmp ():

פונקציה זו משווה בין שתי מחרוזות שהועברו לפונקציה.

תחביר :

int strcmp (קבוע לְהַשְׁחִיר *str1, קבוע לְהַשְׁחִיר *str2)

ערך החזרה: החזר 0 אם המיתרים שווים. החזר מספר שלם שלילי אם ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה קטן מהמחרוזת השנייה. החזר מספר שלם חיובי אם ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה גדול מהמחרוזת השנייה. מערכות מסוימות מחזירות את ההבדל של ערך ASCII של התו הראשון שאינו תואם ומערכות מסוימות מחזירות -1 אם ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה קטן מהמחרוזת השנייה ומחזיר 1 אם ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה גדולה מהמחרוזת השנייה.

דוגמא ערך החזרה הֶסבֵּר
strcmp ( שלום עולם, שלום עולם ) 0 שני מיתרים זהים.
strcmp ( שלום, שלום 0 עולם ) 0 מחרוזות מושווים עד לתו ' 0'. המחרוזת הראשונה כברירת מחדל מסתיימת ב- ' 0', והמחרוזת השנייה מכילה את התו ' 0' אחרי 'שלום'.
strcmp ( שלום 0 0 0 ″, שלום 0 עולם ) 0 מחרוזות מושווים עד לתו ' 0'.
strcmp ( שלום עולם, שלום עולם ) מספר שלילי שלילי ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה ('H') קטן מהמחרוזת השנייה ('h')
strcmp ( שלום עולם, שלום עולם ) מספר שלם חיובי ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה ('h') גדול מהמחרוזת השנייה ('H')

הפונקציה strncmp ():

פונקציה זו דומה לפונקציה strcmp () , אך כאן עלינו לציין כמה בתים מושווים על ידי העברת ארגומנט נוסף לפונקציה.

תחביר:

int strncmp (קבוע לְהַשְׁחִיר *str1, קבוע לְהַשְׁחִיר *str2, גודל_טנ)

ערך החזרה: הפונקציה חוזרת 0 אם הראשון נ התווים של שני המיתרים שווים; אחרת, הוא מחזיר מספר שלם שלילי או חיובי בהתאם לסימן ההבדלים בין ערך ASCII של התו הראשון שאינו תואם.

דוגמא ערך החזרה הֶסבֵּר
strncmp ( שלום עולם, שלום עולם, 5 ) 0 5 הדמויות הראשונות זהות.
strncmp ( שלום, שלום 0 עולם, 5 ) 0 5 הדמויות הראשונות זהות.
strncmp ( שלום 0 0 0 ″, שלום 0 עולם, 8 ) 0 ' 0' הוא אחרי 5 התווים הראשונים בשתי המחרוזות. אז ההשוואה נעצרת אחרי 5 לא 8.
strncmp ( שלום עולם, שלום עולם, 5 ) מספר שלילי שלילי ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה ('H') קטן מהמחרוזת השנייה ('h')

הפונקציה strcasecmp ():

פונקציה זו דומה לפונקציה strcmp () , אבל כאן המיתרים אינם רגישים לאותיות.

תחביר:

intstrcasecmp(קבוע לְהַשְׁחִיר *str1, קבוע לְהַשְׁחִיר *str2)

ערך החזרה: כמו strcmp () , אך מתייחסים למחרוזות כאל בהתאם לרגישות .

דוגמא ערך החזרה הֶסבֵּר
strcasecmp ( שלום עולם, שלום עולם ) 0 שני מיתרים זהים.
strcasecmp ( שלום, שלום 0 עולם ) 0 מחרוזות מושווים עד לתו ' 0'. המחרוזת הראשונה כברירת מחדל מסתיימת ב- ' 0', והמחרוזת השנייה מכילה את התו ' 0' אחרי 'שלום'.
strcasecmp ( שלום עולם, שלום עולם ) 0 מחרוזות הן בהתאם לרגישות. אז שלום עולם והעולם שלום זהים.

הפונקציה strncasecmp ():

פונקציה זו דומה לפונקציה strncmp () , אבל כאן המיתרים אינם רגישים לאותיות.

תחביר:

intstrncasecmp(קבוע לְהַשְׁחִיר *str1, קבוע לְהַשְׁחִיר *str2)

ערך החזרה: כמו strncmp () , כאשר מתייחסים למחרוזות כאל רגישות לאותיות.

דוגמא ערך החזרה הֶסבֵּר
strncasecmp ( שלום עולם, שלום עולם, 5 ) 0 5 הדמויות הראשונות זהות.
strncasecmp ( שלום, שלום 0 עולם, 5 ) 0 5 הדמויות הראשונות זהות.
strncasecmp ( שלום 0 0 0 ″, שלום 0 עולם, 8 ) 0 ' 0' הוא אחרי 5 התווים הראשונים בשתי המחרוזות. אז ההשוואה נעצרת אחרי 5 לא 8.
strncasecmp ( שלום עולם, שלום עולם, 5 ) 0 מחרוזות הן בהתאם לרגישות. אז שלום ושלום זהים.

הפונקציה memcmp ():

פונקציה זו משווה בין שני בלוקים של זיכרון בתים בתים. עלינו להעביר שתי נקודות של בלוקי הזיכרון ואת מספר הבייטים להשוואה.

תחביר:

int memcmp (קבוע בָּטֵל *str1, קבוע בָּטֵל *str2, גודל_טנ)

ערך החזרה: הפונקציה מחזירה 0 אם שני הזיכרון חוסמים ( נ בתים) שווים; אחרת, הוא מחזיר את ההבדלים בין צמד הבייטים הראשון שאינו תואם (בתים מתפרשים כאובייקטים של צ'ארים שאינם חתומים, ולאחר מכן מקודמים ל- int).

דוגמא ערך החזרה הֶסבֵּר
memcmp ( שלום עולם, שלום עולם, 5 ) 0 5 הדמויות הראשונות זהות.
memcmp ( שלום 0 0 0 ″, שלום 0 עולם, 8 ) מספר שלילי שלילי 6 התווים הראשונים זהים, אך התו השביעי שונה. כאן ההשוואה לא נעצרה כמו strncmp () כאשר מקבלים תו ' 0'.
memcmp ( שלום עולם, שלום עולם, 11 ) מספר שלילי שלילי ערך ASCII של התו הראשון ללא תחרות של המחרוזת הראשונה ('H') קטן מהמחרוזת השנייה ('h')

דוגמא:

להלן דוגמת קוד C של כל הפונקציות שנדונו.

01./*stringCompare.c*/
02.
03.#לִכלוֹל
04.#לִכלוֹל
05.
06.intרָאשִׁי()
07.{
08. printf ('strcmp ('שלום עולם','שלום עולם') => %d n', strcmp ( 'שלום עולם','שלום עולם' ));
09. printf ('strcmp ('שלום','שלום\0עוֹלָם') => %d n', strcmp ( 'שלום','שלום 0עוֹלָם' ));
10. printf ('strcmp ('שלום עולם','שלום עולם') => %d n', strcmp ( 'שלום עולם','שלום עולם' ) );
אחת עשרה. printf ('strcmp ('שלום\0\0\0','שלום\0עוֹלָם') => %d n', strcmp ( 'שלום 0 0 0','שלום 0עוֹלָם' ));
12.
13. printf (' n--------------- n');
14.
חֲמֵשׁ עֶשׂרֵה. printf ('strncmp ('שלום עולם','שלום עולם', 5) => %d n', strncmp ( 'שלום עולם','שלום עולם',5 ));
16. printf ('strncmp ('שלום','שלום\0עוֹלָם', 5) => %d n', strncmp ( 'שלום','שלום 0עוֹלָם',5 ));
17. printf ('strncmp ('שלום\0\0\0','שלום\0עוֹלָם', 8) => %d n', strncmp ( 'שלום 0 0 0','שלום 0עוֹלָם',8 ));
18. printf ('strncmp ('שלום עולם','שלום עולם', 5) => %d n', strncmp ( 'שלום עולם','שלום עולם',5 ));
19.
עשרים. printf (' n--------------- n');
עשרים ואחת.
22. printf ('strcasecmp ('שלום עולם','שלום עולם') => %d n',strcasecmp( 'שלום עולם','שלום עולם' ));
2. 3. printf ('strcasecmp ('שלום','שלום\0עוֹלָם') => %d n',strcasecmp( 'שלום','שלום 0עוֹלָם' ));
24. printf ('strcasecmp ('שלום עולם','שלום עולם') => %d n',strcasecmp( 'שלום עולם','שלום עולם' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('שלום עולם','שלום עולם', 5) => %d n',strncasecmp( 'שלום עולם','שלום עולם',5 ) );
29. printf ('strncasecmp ('שלום','שלום\0עוֹלָם', 5) => %d n',strncasecmp( 'שלום','שלום 0עוֹלָם',5 ));
30. printf ('strncasecmp ('שלום\0\0\0','שלום\0עוֹלָם', 8) => %d n',strncasecmp( 'שלום 0 0 0','שלום 0עוֹלָם',8 ));
31. printf ('strncasecmp ('שלום עולם','שלום עולם', 5) => %d n',strncasecmp( 'שלום עולם','שלום עולם',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('שלום עולם','שלום עולם', 5) => %d n', memcmp ( 'שלום עולם','שלום עולם',5 ) );
36. printf ('memcmp ('שלום\0\0\0','שלום\0עוֹלָם', 8) => %d n', memcmp ( 'שלום 0 0 0','שלום 0עוֹלָם',8 ));
37. printf ('memcmp ('שלום עולם','שלום עולם', 11) => %d n', memcmp ( 'שלום עולם','שלום עולם',אחת עשרה ));
38.
39.לַחֲזוֹר 0; 40.}

סיכום:

לכן, במדריך זה, ראינו כיצד ניתן להשוות מחרוזות בדרכים שונות. כפי שראינו, הפונקציה stringCompare () מחזירה -1 עבור מחרוזות לא שוות, אך ניתן לשנות זאת כך שתחזיר ערך ASCII של תו לא תואם. אתה יכול להשתמש בו בקוד שלך, המתאים לך ביותר.