আমি পুনরায় বাস্তবায়ন করার চেষ্টা করছি strcasecmp ফাংশনটি এবং আমি লক্ষ্য করেছি যে তুলনা প্রক্রিয়ায় কোনটি অসঙ্গতি বলে মনে হচ্ছে।
থেকে man strcmp
Strcmp () ফাংশন দুটি স্ট্রিং এস 1 এবং এস 2 এর সাথে তুলনা করে। লোকেলটি অ্যাকাউন্টে নেওয়া হয় না (স্থানীয়-সচেতন তুলনার জন্য, স্ট্রোকল (3) দেখুন)। এটি সংখ্যার চেয়ে কম, সমান বা শূন্যের চেয়ে বৃহত্তর যদি পূর্ণ হয়, যথাক্রমে, কম হয়, মিল হয়, বা এস 2 এর চেয়ে বড় হয়।
থেকে man strcasecmp
স্টারকেসক্যাম্প () ফাংশন অক্ষরের ক্ষেত্রে উপেক্ষা করে স্ট্রিং এস 1 এবং এস 2 এর বাই বাই বাই তুলনা সম্পাদন করে। এটি সংখ্যার চেয়ে কম, সমান বা শূন্যের চেয়ে বৃহত্তর যদি পূর্ণ হয়, যথাক্রমে, কম হয়, মিল হয়, বা এস 2 এর চেয়ে বড় হয়।
int strcmp(const char *s1, const char *s2);
int strcasecmp(const char *s1, const char *s2);
প্রদত্ত, এই তথ্যটি, আমি নিম্নলিখিত কোডের ফলাফল বুঝতে পারি না:
#include <stdio.h>
#include <string.h>
int main()
{
// ASCII values
// 'A' = 65
// '_' = 95
// 'a' = 97
printf("%i\n", strcmp("A", "_"));
printf("%i\n", strcmp("a", "_"));
printf("%i\n", strcasecmp("A", "_"));
printf("%i\n", strcasecmp("a", "_"));
return 0;
}
Ouput:
-1 # "A" is less than "_"
1 # "a" is more than "_"
2 # "A" is more than "_" with strcasecmp ???
2 # "a" is more than "_" with strcasecmp
এটি উপস্থিত অক্ষরটি যদি s1একটি অক্ষর হয় তবে উপস্থিত অক্ষরটি নির্বিশেষে এটি সর্বদা ছোট হাতের অক্ষরে রূপান্তরিত হয় appearss2 একটি অক্ষর বা নয়।
কেউ কি এই আচরণ ব্যাখ্যা করতে পারেন? প্রথম এবং তৃতীয় লাইনটি এক হওয়া উচিত নয়?
তুমাকে অগ্রিম ধন্যবাদ!
PS:
আমি gcc 9.2.0মাঞ্জারো ব্যবহার করছি ।
এছাড়াও, আমি যখন -fno-builtinপতাকাটি সংকলন করি তখন পরিবর্তে পাই:
-30
2
2
2
আমি অনুমান করি কারণ এটি প্রোগ্রামটি সিসির অপ্টিমাইজড ফাংশনগুলি ব্যবহার করে না, তবে প্রশ্নটি রয়ে গেছে।
strcasecmpআপনি উল্লেখ করছেন তার বিবরণটি সঠিক নয়। Upvated উত্তরে আরও বিশদ।
A < _ && a > _ && A == aঅনেক সমস্যার কারণ হতে পারে।
unsigned char। C17 / 18 "স্ট্রিং হ্যান্ডলিং <স্ট্রিং।>" -> "এই উপক্লাজের সমস্ত ফাংশনের জন্য, প্রতিটি অক্ষরকে ব্যাখ্যা করা হবে যেমন এটির ধরন রয়েছে unsigned char"। charমানগুলি ASCII ব্যাপ্তি 0-127 এর বাইরে গেলে এটি একটি পার্থক্য তৈরি করে ।
printf("%i\n", strcasecmp("a", "_"));এই সম্ভবতঃ হিসাবে একই ফলাফলের থাকা উচিতprintf("%i\n", strcasecmp("A", "_"));কিন্তু তার মানে তাদের এক এই দুটি কেস-অবশ কল তার কেস সংবেদনশীল সহযোগীর সঙ্গে মতানৈক্য যাচ্ছে।