অন্যের সাথে স্ট্রিংয়ের তুলনা করার জন্য আমরা যদি-অন্য সিঁড়ি থেকে পালাতে পারি না। এমনকি নিয়মিত স্যুইচ-কেসটি অভ্যন্তরীণভাবে যদি অন্য কোনও মই হয় (পূর্ণসংখ্যার জন্য)। আমরা কেবল স্ট্রিংয়ের জন্য স্যুইচ-কেসটি অনুকরণ করতে চাই, তবে অন্য-মই যদি কখনও প্রতিস্থাপন করতে পারি না। স্ট্রিং তুলনার জন্য অ্যালগরিদমগুলির সেরাটি স্ট্রিংসিএমপি ফাংশন ব্যবহার থেকে বাঁচতে পারে না। চরিত্র অনুসারে চরিত্রের তুলনা করার অর্থ কোনও মিল নেই যতক্ষণ না পাওয়া যায়। সুতরাং if-other মই এবং strcmp ব্যবহার অনিবার্য।
ডেমো
এবং স্ট্রিংগুলির জন্য স্যুইচ-কেস অনুকরণ করার জন্য এখানে সহজ ম্যাক্রোগুলি রয়েছে।
#ifndef SWITCH_CASE_INIT
#define SWITCH_CASE_INIT
#define SWITCH(X) for (char* __switch_p__ = X, int __switch_next__=1 ; __switch_p__ ; __switch_p__=0, __switch_next__=1) { {
#define CASE(X) } if (!__switch_next__ || !(__switch_next__ = strcmp(__switch_p__, X))) {
#define DEFAULT } {
#define END }}
#endif
এবং আপনি তাদের হিসাবে ব্যবহার করতে পারেন
char* str = "def";
SWITCH (str)
CASE ("abc")
printf ("in abc\n");
break;
CASE ("def")
printf("in def\n");
CASE ("ghi")
printf ("in ghi\n");
DEFAULT
printf("in DEFAULT\n");
END
আউটপুট:
in def
in ghi
in DEFAULT
নীচে নেস্টেড সুইচ ব্যবহার:
char* str = "def";
char* str1 = "xyz";
SWITCH (str)
CASE ("abc")
printf ("in abc\n");
break;
CASE ("def")
printf("in def\n");
SWITCH (str1)
CASE ("uvw")
printf("in def => uvw\n");
break;
CASE ("xyz")
printf("in def => xyz\n");
break;
DEFAULT
printf("in def => DEFAULT\n");
END
CASE ("ghi")
printf ("in ghi\n");
DEFAULT
printf("in DEFAULT\n");
END
আউটপুট:
in def
in def => xyz
in ghi
in DEFAULT
এখানে বিপরীত স্ট্রিং সুইচ, যেখানে আপনি CASE শৃঙ্খলে একটি পরিবর্তনশীল (ধ্রুবকের চেয়ে) ব্যবহার করতে পারেন:
char* str2 = "def";
char* str3 = "ghi";
SWITCH ("ghi")
CASE (str1)
printf ("in str1\n");
break;
CASE (str2)
printf ("in str2\n");
break;
CASE (str3)
printf ("in str3\n");
break;
DEFAULT
printf("in DEFAULT\n");
END
আউটপুট:
in str3