با استفاده از std::strstr یک برنامهٔ C++ بنویسید که در یک رشتهٔ ورودی بهدنبال توابع ریاضی مانند "sin" بگردد و تعداد وقوعها و اندیس شروع هر وقوع را چاپ کند.
13.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:52 0.0
برای حل این مسئله از توابع C-style در استفاده کنید: رشتهٔ std::string ورودی را با c_str() به رشتهٔ C تبدیل کنید و با std::strstr در یک حلقه بهدنبال زیررشته بگردید؛ هر بار که اشارهگر بازگشتی nullptr نبود، اندیس شروع را با تفریق اشارهگر فعلی از اشارهگر پایه محاسبه کنید و سپس برای ادامه جستجو اشارهگر را پیش ببرید (میتوانید به اندازهٔ طول الگو یا یک کاراکتر پیش بروید تا وقوعهای همپوشان را هم پیدا کنید). نکات: بررسی nullptr برای پایان جستجو ضروری است، توجه کنید که std::strstr حساس به حروف بزرگ/کوچک است و برای کاربردهای مرتبط با تحلیل کد (کامپایلر/مفسر) یا شناسایی توابع ریاضی در پردازش عبارات عددی مفید است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
یک نکتهٔ مهم این است که c_str() اشارهگر معتبری میدهد تا زمانی که رشتهٔ std::string تغییر نکند، بنابراین از تغییر محتوا بین فراخوانیها خودداری کنید. برای محاسبهٔ اندیس شروع، تفریق اشارهگر فعلی از اشارهگر پایه درست است ولی خروجی را به نوع مناسب مانند size_t تبدیل کنید تا منفی یا ناصحیح نشود. اگر میخواهید وقوعهای همپوشان را هم بشمارید اشارهگر را فقط یک کاراکتر جلو ببرید وگرنه آن را به اندازهٔ طول الگو جا بهجا کنید. تابع std::strstr نسبت به حروف بزرگ/کوچک حساس است و برای جستجوی بدون حساسیت یا پشتیبانی از یونیکد بهتر است از تبدیل حروف یا از std::string::find/regex مناسب استفاده کنید.
گزارش