• 1405/04/01

مشکل در مقایسه :

سلام و وقت بخیر
چرا strcmp() فقط اعداد 0 و -1 و 1 بر میگردونه بهم؟
این کد زیر رو چک کنید که 1 برگردوند

echo strcmp("Hello world!","Hello") ;
 

  • 1405/04/01
  • ساعت 22:16

سلام و عرض ادب وقت شما بخیر 

 

۱. دلیل طراحی: این تابع برای مرتب‌سازی (Sorting) ساخته شده است. در مرتب‌سازی فقط «جهت» تفاوت (بزرگ‌تر، کوچک‌تر یا مساوی) مهم است، نه مقدار دقیق فاصله (دقیقاً مثل عملگر <=>). ۲. یک اصلاح مهم: strcmp دقیقاً ۱- و ۱ برنمی‌گرداند، بلکه اختلاف کد اسکی (ASCII) اولین کاراکترهای متفاوت را برمی‌گرداند. (مثلاً strcmp("a", "b") می‌شود ۱-).

درباره کد شما: در "Hello world!" و "Hello"، تفاوت در کاراکتر ششم است (Space با کد 32 در برابر پایان رشته با کد 0). بنابراین خروجی واقعی این کد باید 32 باشد، نه 1! (احتمالاً کد دیگری مثل "a" و "b" را تست کرده‌اید که ۱- یا ۱ برمی‌گرداند).