إخواني المبرمجين
عندي سؤال مهم وهو عن طريقة دعم C++ للغة العربية
توضيح أكثر أقوم بأدخال نص عربي ومن ثم أقوم ببعض العمليات عليه من مقارنة أو غيرها بلغة C++
و ياليت الشرح يكون خطوة خطوة ويكون بظام لينكس خاصة و إن كان ويندز فلا بئس
لتعم الفائدة
إخواني المبرمجين
عندي سؤال مهم وهو عن طريقة دعم C++ للغة العربية
توضيح أكثر أقوم بأدخال نص عربي ومن ثم أقوم ببعض العمليات عليه من مقارنة أو غيرها بلغة C++
و ياليت الشرح يكون خطوة خطوة ويكون بظام لينكس خاصة و إن كان ويندز فلا بئس
لتعم الفائدة
تم تعديل هذه المشاركة بواسطة light stars في 9 مايو 2011 في 15:17
شكرا على الرابط لكن لاتوجد معلومة فيه عن دعم اللغة العربية
فياليت لو تعلمنا الخطوات أو رابط أفضل من هذا
ﻷني بصراحة ما فهمت من الرابط الطريقة
تم تعديل هذه المشاركة بواسطة light stars في 10 مايو 2011 في 18:10
سيطبع لك حرف "ض"
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
setlocale(LC_CTYPE,"ar_SA.utf8");
wchar_t stuff = L'ض';
wprintf(L"%lc\n",stuff);
return 0;
}بالنسبة للوندوز، ربما يعمل مباشرة او ربما يعمل بتغييرات طفيفة تتعلق بinclude او قيمة LC_CTYPE
لكنه سيعمل على اللينوكس مباشرة

شكرا أخوي MohamedIBrahim لكن ما الفرق بين النصية وارسومية
أريد أدخل نص عربي و أقوم بمعالجتة ثم طباعتة
أخوي password123 جربت الكود لكن مشكلته يطبع أستفهام ؟ بدل حرف "ض"
فهل معناها أني أغير إعدادات التيرمنال عشان يطبع عربي
أو أنه ناقصة مكتبة
أو أغير ترميز text editor علما أنة يكتب عربي
أم ماذا أفعل أرشدوني
وجزاكم الله خيرا
هل انت على وندوز؟
انا كودي يعمل على لينكس
وكما قلت سابقا الاحتمالات تكون في include اشياء اخرى لان وندوز ومايكروسوفت يحبون البدعة
ممكن تجوجلها بنفسك فيما يخص الوندوز
انا اعلنت التبرؤ التام من الوندوز
لذا سيساعدك فيها mohammed ibrahim :ph34r: باذن الله

light stars كتب:شكرا أخوي MohamedIBrahim لكن ما الفرق بين النصية وارسومية
سأعطيك مثال بسيط أنت فى بيئة الويندوز تتعامل مع سطح المكتب ومهام عديدة وتستخدم قوائم وازرار فهذا يعنى انك فى بيئة رسومية
اما مثلا نظام الدوس فأنت تتعامل مع بيئة نصية >> وان كان هناك بعض البيئات الرسومية للدوس
GoodBye
أخ light stars لغة السي++ لا علاقة لها بالمطبوعات نصيه كانت أو رسوميه. لذا اذا اردت كتابة نص بالعربي داخل متغير من نوع char او من نوع wchar_t فالامر فى النهايه يعتمد على صفحة المحارف التى ستاخذ ارقام الحروف و تظهر لك الهيئه الرسوميه لها، يعنى بإختصار قم بضبط الشاشه التي سيتم طباعة عليها المخرجات لتظهر العربيه حينها ستظهر لك النتائج بالعربيه.
داخل ويندوز قم بإستخدام الداله SetConsoleOutputCP لتحديد صفحة المحارف التى سيتم إستخدامها من قبل الشاشه لطباعة الكلمات من البرنامج للشاشه و قم باستخدام الداله SetConsoleCP لتحديد صفحة المحارف المستخدمه لادخال القيم لبرنامجك من خلال الشاشه.
الكلام السابق ينطبق على شاشة الكونسول.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
أنا نظامي لينكس ubuntu 11
و أتعامل من البيئة النصية
يعني المشكلة تكون في نفس التيرمنال
/public/style_extra/post_icons/icon8.gif
وفي الصورة قمت بطباعة حرفين عربي وواحد أنجليزي فتلاحظ أن السطر اﻷول والثالث أصبح ؟ ﻷنهما عربية و السطر الثاني طبع m يشكل صحيح
الترمنال عندي
UTF-8)
unicode
وإذا كان wchar_t stuff = L'ض'; زي ما عرضته أخي password123
للحرف الواحد العربي
فما هو prototype للكلمة " *string " " char "
يا جماعة حببوني في اللينكس مازلت مبتدأ فيه
تم تعديل هذه المشاركة بواسطة light stars في 12 مايو 2011 في 15:03
استخدم Arabic Terminal ستجدها ان بحثت فى جوجل
.Everyone has a dream
.I never thought that I would be the one I am on now
...No Pain No Gain
مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...
تعديل: مشرف قسم السى/سى++ من 2012.
مشكووووووور password123
الكود صحيح وطبقة ولا توجد فيه أخطاء
لكن يبدوا أن المشكلة في
* الterminal يدعم utf8
* الخط المستخدم يحتوي على الحروف العربية
وشكرا XMasterrrr
وجاري البحث عن Arabic Terminal في قوقل
هناك تجربة صغيرة ممكن تعملها للتاكد
جرب تحول الكيبورد عربي (مثلما تحوله عربي لتكتب هنا في المنتدى)
وثم اكتب داخل الترمينال.... هل تظهر الحروف عربية؟
صحيح انها ستظهر معكوسة (من اليسار لليمين لكن المهم ان الحروف تظهر)
اذا ظهرت الحروف يعني التيرمينال سليم.

فعلت التجربة بالكتابة داخل التيرمنال كما قلت password123
فظهرت حروف عربية مقلوبة
أجل المشكلة ليست في التيرمنال؟؟؟؟؟
تم تعديل هذه المشاركة بواسطة light stars في 14 مايو 2011 في 17:20
بالضبط... ليست بالتيرمينال.. وهذا جيد اننا عرفنا هذا.
ممكن تضع كوبي بيست بكل ضمير واخلاص هنا؟
يعني لا تقوم بتغيير اشياء حتى يظهر اكثر احترافية... بالضبط اكتب cat codefile وضع المحتوى هنا
وحتى لا تصاب بالملل.. جرب هذا الكود البديل... لاحظ انني بدلا من ar_SA.utf8 استبدلته ب"" فارغ.. وهذا له معنى ممكن تقرؤه في man locale
لكن جرب وقلي.... وكذلك لا تنسى تعطيني محتوى الملف الكود تبعك بالكامل
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
setlocale(LC_CTYPE,"");
wchar_t stuff = L'ض';
wprintf(L"%lc\n",stuff);
return 0;
}
جزالك الله خيرا
والله إنك فكيت أزمة كبيرة password123
فوضعت كوبي بيست بكل ضمير واخلاص هنا :P
وطبق تمام
فياليت لو تشرح الكود ؟؟
ولو أردت أخذ كلمة كاملة بدل حرف واحد "string" كيف ؟؟
ﻷن فكرت برنامجي أخذ كلمة عربية وأفصل حروفها في مصفوفة ثم أقوم ببعض العمليات عليها كالمقارنه بين الكلمات "قياس تشابة الكلمات"
وهذا سهل بالنسبة للكلمات الإنجليزية لكن بالعربي لا زلت أجهلها
جرب
wchat_t* my_str = "مرحبا";
ملحوظه .. تظهر الحروف مقلوبه .(عندي)
arabic2.cpp:11:20: error: cannot convert ‘const char*’ to ‘wchar_t*’ in initialization
المشكلة في :wacko:
wchar_t *my_str = "مرحبا";
light stars
س: فياليت لو تشرح الكود ؟؟
ج: لو تكتب man setlocale ستجد الشرح لكل شيء..
بما يخص ""، كل الذي يحدث انه ياخذ القيمة من environment variables
س: ولو أردت أخذ كلمة كاملة بدل حرف واحد "string" كيف ؟؟
ج: الstring ماهو الا array of characters

مشكورين على المعلومات السابقة
طيب يا شباب إذا أرت أن أقارن بي نصين عربيين
كيف تكوون طبعا المقارنة تكون بين الحروف
يعني نقارن الحرف اﻷو للكلمة اﻷولى بالحرف اﻷول للكلمة الثانية
مثال :
كلمة1: حديقة
كلمة1: حقبة
يقارن الحرف اﻷول بالحرف اﻷول و الحرف الثاني بالثاني وهكذا
ويرجع لنا الحروف المتشابهة =4
كتبت هذا الكود وطبقتع على كلمات أنجليزية و أخرج نتائج صحيحة
لكن عند تطبيقة على كلمات عربية يخرج نتائج خاطئة
و لعل المشكلة تكون في أن الحرف العربي يعتبر حرفين أو أنة يزيد حرف أو مشكلة أخرى لا أعلم عنها
فنريد تصحيح الكود بورك فيك
for(size_t i = 0; i < x.length(); i++)
{
check=0;
for(size_t n = 0; n < y.length(); n++)
{
if(x==y[n])//if (x.compare(i,2,y,n,2) == 0)
check++;
}
if(check > 0)
{
matching++;//matching
cout<<x;
}
}