یک برنامه به زبان C بنویسید که یک سطر ورودی را از کاربر بخواند و تعداد شناسههای معتبر (C identifiers) موجود در آن را شمارش کند.
12.0 بازدید آخرین ویرایش در 199 روز قبل ساعت 23:59 0.0
برای حل این مسئله رشته ورودی را با fgets در یک آرایه کاراکتری بخوانید و با یک حلقه آن را پیمایش کنید؛ با استفاده از توابع ctype.h مانند isalpha() برای تشخیص شروع شناسه (یا بررسی '_' بهعنوان شروع معتبر) و isalnum() برای ادامهٔ شناسه، یک متغیر حالت (مثلاً in_identifier) نگه دارید تا وقتی به ابتدای یک شناسه جدید رسیدید شمارنده را افزایش دهید. این کار شبیه مرحلهٔ تحلیل لغوی (lexical analysis) در کامپایلرهاست؛ نکتهها: ارقام بهتنهایی شروعکنندهٔ شناسه نیستند، underscore مجاز است، و از پایان رشته ('\0') برای خاتمه استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای پیادهسازی بهطور ساده از fgets با یک بافر مناسب برای خواندن یک سطر و سپس حلقهای که تا '\0' پیمایش میکند استفاده کنید. ابتدای شناسه را با شرطی مانند isalpha((unsigned char)c) || c=='_' و ادامهٔ شناسه را با isalnum((unsigned char)c) || c=='_' تشخیص دهید و با یک متغیر حالت in_identifier شمارنده را افزایش دهید. توجه کنید که توابع ctype.h اگر آرگومان منفی بگیرند ناخواسته رفتار میکنند، بنابراین همیشه کاراکترها را به unsigned char تبدیل کنید. در صورت نیاز به دقت بیشتر، شناسههای درون رشتهها یا کامنتها را نادیده بگیرید و در صورت خواست، کلیدواژههای C را از شمارش مستثنی کنید.
گزارش