یک برنامهٔ ساده در زبان C بنویسید که دو رشتهٔ واردشده را با استفاده از تابع memcmp از هدر string.h مقایسه کند و چاپ کند که رشته‌ها برابرند یا کدام یک به‌صورت لغت‌نامه‌ای بزرگ‌تر/کوچک‌تر است.

6.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:26

0.0

دو رشته را با scanf یا fgets بخوانید و هدر string.h را شامل کنید؛ از strlen برای به‌دست‌آوردن طول‌ها استفاده کنید و سپس memcmp(buf1, buf2, n) را فراخوانی کنید که مقدار منفی/صفر/مثبت برمی‌گرداند. برای مقایسهٔ کامل، اگر طول‌ها برابرند از memcmp(s1, s2, len+1) (شامل نویسهٔ پایان) استفاده کنید، در غیر این صورت ابتدا تا طولِ کوچک‌تر memcmp کنید و اگر آنها برابر بودند رشتهٔ طولانی‌تر را بزرگ‌تر در نظر بگیرید؛ برنامه را با مثلاً gcc -std=c11 -Wall کامپایل کنید.

توسط پژوهشگر در 202 روز قبل ساعت 02:26
دسته بندی ها: C for beginner
arash در 202 روز قبل ساعت 09:38

نکته: memcmp برای مقایسهٔ دقیق رشته‌ها مناسب است اما برای تعیین ترتیب لغت‌نامه‌ای به‌درستی باید طول را در نظر گرفت و پایان NUL را نیز لحاظ کرد. توجه کنید که خروجی memcmp به تفاوت بایت‌های اولیست که با n مشخص می‌شود، بنابراین مقایسهٔ با دو رشته که طول‌های متفاوت دارند باید با مقایسهٔ طول‌ها آغاز شود و در صورت برابر بودن، به‌کارگیری memcmp با len+1 برای شامل '\0' مفید است. همچنین بهتر است داده‌ها را با unsigned char یا با استفاده از cast به const unsigned char* به memcmp بدهید تا رفتار منفی/positive در پی‌آمدها به‌طور یکنواخت باشد. برای خواندن خطوط می‌توانید از fgets استفاده کنید و نگران newline باشید یا اگر از scanf استفاده می‌کنید محدودیت‌های ورودی را مدیریت کنید. در نهایت، در هر کامپایل با gcc -std=c11 -Wall توصیه می‌شود که هشدارها را جدی بگیرید تا با خطاهای احتمالی برخورد نکنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری