کمک در مورد فارسی نویسی در ++c

amir.nemati63

کاربر VIP
با سلام به همه و تشکر مخصوص از استاد عزیز the king

سه تا سوال در سطح مبتدی برام پیش اومده.

1-اول اینکه چطور میشه توی ++C یه رشته رو به صورت فارسی وارد کرد؟
فرض کنید قراره روی یه رشته که توسط کاربر و از طریق پنجره ی کنسول وارد میشه عملیاتی انجام بگیره.و این رشته باید فارسی باشه.
من ALT+SHIFT رو امتحان کردم ولی نشد.


2-چطور میشه یه شمارنده برای تعداد حروف یه کلمه یا یه جمله درست کرد؟
مثلا" برنامه باید یه عبارت رو از کاربر دریافت کنه و تعداد حروف این عبارت مهمه و باید شمرده بشه ولی از پیش مشخص نیست.

3-چه روندی رو برای برنامه نویسی پیش بگیرم که بعد از انجام یه دستور برنامه تموم نشه و عمل بعدی رو انجام بده.مثلا" منتظر ورود اطلاعات از کاربر باشه.
توی این برنامه ای که نوشتم برنامه بعد از گرفتن ورودی اول خاتمه پیدا میکنه و منتظر دریافت رشته نمی مونه.

کد:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    int i;
    cout << "Enter length  of string " << endl;
    cin >> i;
    char string[i];
    cout << "Enter a word" << endl;
    cin.get(string,i);

    return 0;
}


ضمنا" من با برنامه ی CodeBlocks کد های ++C رو مینویسم.


خیلی متشکرم.
 

the_king

مدیرکل انجمن
با سلام به همه و تشکر مخصوص از استاد عزیز the king

سه تا سوال در سطح مبتدی برام پیش اومده.

1-اول اینکه چطور میشه توی ++C یه رشته رو به صورت فارسی وارد کرد؟
فرض کنید قراره روی یه رشته که توسط کاربر و از طریق پنجره ی کنسول وارد میشه عملیاتی انجام بگیره.و این رشته باید فارسی باشه.
من ALT+SHIFT رو امتحان کردم ولی نشد.
کار سختی است، اولین دلیلش اینه که کد های معمولی ++C رشته هایشان مبتنی بر char هستند که یک بایتی است
و برای کاراکتر های غیر لاتین مناسب نیست. بایستی از رشته های Unicode استفاده بشه که مبتنی بر wchar_t
هستند. ثانیا بجای توابع و روتین های معمولی باید از جایگزین های Unicode شان استفاده شود. ثالثا نتیجه در
کامپایلر ها و سیستم عامل های متفاوت یکسان نیست. رابعا فونت مورد استفاده هم باید شامل کاراکتر های
فارسی باشد، معمولا در محیط Console از فونت هایی استفاده می شود که جدول کاراکتر هایشان کامل نیستند.
در کل کار با ورودی خروجی Unicode در محیط Console ای مشکل زیاد دارد.

در این مورد مباحثی در اینترنتی پیدا میشه، مثلا رجوع شود به :
Unicode Output to the Windows Console

2-چطور میشه یه شمارنده برای تعداد حروف یه کلمه یا یه جمله درست کرد؟
مثلا" برنامه باید یه عبارت رو از کاربر دریافت کنه و تعداد حروف این عبارت مهمه و باید شمرده بشه ولی از پیش مشخص نیست.
شمارنده یک متغیره که اول مقدار 0 بهش می دهید، بعد از اولین کاراکتر رشته تا آخرین کاراکتر رشته را بررسی
خواهید کرد. اگر کاراکتر پایانی کلمه (فاصله، نقطه، ویرگول و ...) نبود شمارنده را یک واحد افزایش می دهید،
وگرنه کلمه تمام شده و شمارنده را برای شمارش کاراکتر های بعدی صفر می کنید.

کد:
char s[] = "this is a sample";
int i = 0, counter = 0;
do
{
	if ((s[i] == 0) || (s[i] == '.') || (s[i] == ' '))
	{
		if (counter > 0)
			cout << counter << " ";
		counter = 0;
		if (s[i] == 0)			
			break;
	}
	else
		counter++;
	i++;
}

یکسری کار های مشابه در فروم هست :
مشکل:سورس شمارنده ارقام و حروف
برنامه ای که 10 جمله را خوانده تعداد حروف، ارقام و کلمات را تعیین کند- سی پلاس
شمارش تعداد کلمات در سی ++

3-چه روندی رو برای برنامه نویسی پیش بگیرم که بعد از انجام یه دستور برنامه تموم نشه و عمل بعدی رو انجام بده.مثلا" منتظر ورود اطلاعات از کاربر باشه.
یک مشکل تکنیکی هست.
اصولا وقتی یک ورودی به سیستم وارد میشه، فرضا کلیدی فشرده میشه، درون یک بافر ورودی قرار می گیره.
دستورات ورودی وقتی چیزی را از ورودی می خوانند آنرا از داخل این بافر خوانده و سپس از بافر حذف می کنند.
اما یکسری موارد استثنایی هست که مقدار رو از بافر می خوانند و اما از بافر بر نمی دارند و حذف نمی کنند.
مشکل سر همین مقادیری است که از بافر بر داشته نمی شود و در بافر باقی می ماند و ورودی های بعدی را
تحت تاثیر قرار می دهد.

راه حل ساده است، بعد از اینکه چیزی را از ورودی خواندید، با (fflush(stdin حافظه بافر ورودی را پاک کنید تا اگر
بعد از خواندن ورودی چیزی داخل بافر مانده باشد حذف شود و دستور ورودی بعدی را دچار مشکل نکند.
رجوع شود به :
دریافت رشته با scanf بدون فاصله
 

Alireza_css

New Member
ببخشید من یه مشکلی داشتم در dev سی پلاس پلاس و اونم این هستش که چه طوری میشه در قسمت توضیحات یه سورس فایل فارسی تایپ کرد وقتی میخوام تایپ کنم یه سری حروف الکی تایپ میشه !!!

ممنون میشم اگه هرر چه زود تر بهم جواب بدین . (عکسش رو هم فرستادم ). با علامت آبی مشخص کردم .

Capture.PNG
 

the_king

مدیرکل انجمن
ببخشید من یه مشکلی داشتم در dev سی پلاس پلاس و اونم این هستش که چه طوری میشه در قسمت توضیحات یه سورس فایل فارسی تایپ کرد وقتی میخوام تایپ کنم یه سری حروف الکی تایپ میشه !!!

ممنون میشم اگه هرر چه زود تر بهم جواب بدین . (عکسش رو هم فرستادم ). با علامت آبی مشخص کردم .

مشاهده پیوست 96477

لابد نسخه ++Dev-C تون قدیمی یه، نسخه جدید اش فعلا 5.4.2 است به حجم 41.7 مگابایت :

Download Orwell Dev-C++ IDE

کلا IDE هایی که صرفا متن های ANSI رو قبول می کنند و تنظیمی برای انتخاب Character Set یا Code Page ندارند همین مشکل رو دارند.
از IDE هایی استفاده کنید که یا متن های Unicode رو قبول می کنند و یا تنظیمی برای انتخاب Character Set یا Code Page دارند، مثلا
Code::Blocks یا Quincy 2005 یا ++Dev-C نسخه جدید.

در ضمن تنظیم Non Unicode Language ویندوز روی زبان فارسی رو هم فراموش نکنید :

درهم نشان دادن بعضی از کلمات فارسی در ویندوز 7 و سرور 2008
 
آخرین ویرایش:

Alireza_css

New Member
لابد نسخه ++Dev-C تون قدیمی یه، نسخه جدید اش فعلا 5.4.2 است به حجم 41.7 مگابایت :

Download Orwell Dev-C++ IDE

کلا IDE هایی که صرفا متن های ANSI رو قبول می کنند و تنظیمی برای انتخاب Character Set یا Code Page ندارند همین مشکل رو دارند.
از IDE هایی استفاده کنید که یا متن های Unicode رو قبول می کنند و یا تنظیمی برای انتخاب Character Set یا Code Page دارند، مثلا
Code::Blocks یا Quincy 2005 یا ++Dev-C نسخه جدید.

در ضمن تنظیم Non Unicode Language ویندوز روی زبان فارسی رو هم فراموش نکنید :

درهم نشان دادن بعضی از کلمات فارسی در ویندوز 7 و سرور 2008


مرسی خیلی ممنون مشکلم بر طرف شد . :green::green:

از همون ورژن قدیمی خودم استفاده کردم ولی همون تنظیم ( Non Unicode Language ) رو انجام دادم و مشکلم بر طرف شد . :idea:

بازم ممنون خِِِِِِِِِیــــــــــــــــــــــــــــــــــــــــــلیـــــــــــــــــــــــــــــــــــــــــ منون :eye:
 

جدیدترین ارسال ها

بالا