انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: آیا این نویسه (کاراکتر) جزء الفای فارسی است یا خیر؟ (نمونه کد c++)  (دفعات بازدید: 905 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین علی ۵۰۰

  • Hero Member
  • *
  • ارسال: 775
  • جنسیت : پسر
سلام
یک برنامه نوشتم که تعیین می‌کنه آیا حرف اول جمله‌ای رو که وارد کردید، جزء الفبای فارسی هست یا نه؟ اگر بود مقدار «درست» و اگر نبود مقدار «غلط» رو چاپ می‌کنه. (کد زیر از این جهت مهمه که کمی به شما یاد می‌ده چطوری از char16_t و u16string استفاده کنید.) برای کامپایل برنامهٔ زیر باید از استاندارد سی‌پلاس‌پلاس ۱۱ استفاده کنین. از اونجایی که من نام متغیر و تابع زیر رو به صورت یونیکد فارسی نوشتم، برای کامپایل کردنش نیازه که از clang++ نسخه ۳٫۳ به بالا استفاده کنید. چون کامپایلر clang از unicode identifier تا حدودی پشتیبانی می‌کنه. (فکر کنم حدودش در استاندارد سی‌پلاس‌پلاس اومده باشه)

برای کامپایل کردن برنامه زیر به صورت زیر عمل کنید:
clang++ source.cpp -std=c++11کد:
#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;
    }
}

خروجی: (من از خط فرمانی استفاده کردم که توانایی راست به چپ کردن حروف فارسی رو داشته باشه)
« آخرین ویرایش: 24 اردیبهشت 1396، 01:21 ب‌ظ توسط علی ۵۰۰ »