PDA

View Full Version : آیا نویسهٔ ورودی جزء الفبای فارسی است یا خیر؟ (نمونه کُد)



علی بهمنی جلالی
یک شنبه 24 اردیبهشت 1396, 13:10 عصر
سلام
یک برنامه نوشتم که کارش این است که یک ورودی از کاربر می‌گیرد و بررسی می‌کند که آیا اولین حرف این جمله جزء الفبای فارسی است یا خیر. اگر بود، کلمه «درست» را به خروجی می‌فرستد و اگر غلط بود، کلمه «غلط» را به خروجی می‌فرستد. در این مثال از استاندارد C++‎‎‎‎‎‎‎‎‎‎‎‎ 11 استفاده شده است و از آنجا که از unicode identifier مثل متغیر و تابع‌های فارسی استفاده کردم، برای کامپایل کدهای پایین نیاز هست از کامپایلری استفاده کنید که از unicode identifier پشتیبانی بکند. مثلاً کامپایلر clang++ از unicode identifier تا حدودی پشتیبانی می‌کند. برای اینکه ببینید تا چه مقدار از آن پشتیبانی به عمل می‌آورد، به مستندات کامپایلر مراجعه کنید. اگر کامپایلر شما از unicode identifier پشتیبانی نمی‌کند، متغیرها و تابع‌های یونیکد زیر را به ascii تغییر دهید. (البته مقدار unicode داخل متغیرها و تابع‌ها را به ascii تبدیل نکنید. برای کامپایل این برنامه در کامپایلر clang++ می‌توانید از روش زیر استفاده کنید.
clang++ source.cpp -std=C++‎‎‎‎‎‎‎‎‎‎‎‎11
(در خط بالا در قسمت std=C++‎‎‎‎11 بجای استفاده از C بزرگ، از c کوچک استفاده کنید)


#include <iostream>
#include <locale>
#include <string>
#include <codecvt>


using namespace std;


bool آیا_الفبای_فارسی_است(char16_t);


int main()
{
wstring_convert< codecvt_utf8_utf16< char16_t >, char16_t > convert;
string متن;
cout << "الفبای خود را وارد کنید: ";
cin >> متن;


u16string موقت = convert.from_bytes(متن);
char16_t حرف /*harf*/ = موقت.at(0);


cout << ( آیا_الفبای_فارسی_است(حرف) ? "درست" : "غلط" ) << endl;
}


bool آیا_الفبای_فارسی_است(char16_t حرف)
{
switch (حرف)
{
case u'آ':
case u'ا':
case u'ب':
case u'پ':
case u'ت':
case u'ج':
case u'چ':
case u'ح':
case u'خ':
case u'د':
case u'ذ':
case u'ر':
case u'ز':
case u'ژ':
case u'س':
case u'ش':
case u'ص':
case u'ض':
case u'ط':
case u'ظ':
case u'ع':
case u'غ':
case u'ف':
case u'ق':
case u'ک':
case u'ل':
case u'م':
case u'ن':
case u'و':
case u'ه':
case u'ی':
return true;
default:
return false;
}
}


خروجی: (من در این مثال از خط فرمانی استفاده کردم که بتواند حروف فارسی را از راست به چپ نمایش دهد)
145207

Ananas
چهارشنبه 27 اردیبهشت 1396, 01:37 صبح
سلام.
البته به جای switch اینجور هم میشه نوشت:
((wc >= L'آ') && (wc <= L'ی'))