PDA

View Full Version : کار با کارکترهای یک تکست باکس



programerinfonet
چهارشنبه 19 مهر 1391, 10:06 صبح
دوستان به نوشته ی زیر دقت کنید
الف=1 ب=2 پ=3 ت=4 ث=5 ج=6 چ=7 و ...
حالا میخوام وقتی تو تکست باکس وارد کردم " محمد " بیاد تک تک حروف محمد رو به عدد خودش تبدیلو در نهایت اعداد رو با هم جمع کنه و نتیجه رو به کاربر نمایش بده
چه طوری این کار رو بکنم
ممنون

morteza271
چهارشنبه 19 مهر 1391, 10:21 صبح
شما اول لیست حروف و اعداد رو در یه آرایه ی 2بعدی ذخیره کنید.
بعد مثلا در رویداد کلیک کلید کارهای زیر رو انجام بدین :
1- یک متغیر با نام sum تعریف کنید و مقدار پیش فرض 0 بهش بدین.
2- متن داخل تکست باکس رو در یه آرایه char بریزید :
char[] strListChar = textBox1.Text.ToCharArray();
3- بعد با یه حلقه تا انتهای این آرایه حرکت کنید و تک تک خانه ها رو با کل خانه های اون آرایه ی دوبعدی مقایسه کنید و عدد متناظرش رو با مقدار فعلی sum جمع کنید.

موفق باشید

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 10:23 صبح
یه آرایه از حروف الفبا بسازید که ترتیب حروف الفبا رو داشته باشه. بعد هر حرفی که از تکست باکس می‌کشید بیرون اندیسش در آرایه جمع با یک می‌شه عددش. همه رو جمع بزنید.

البته این الگوریتم ساده‌ترین هستش با مرتبه زمانی توان دو. می‌شه بهتر هم نوشت.

harani
چهارشنبه 19 مهر 1391, 10:57 صبح
مطابق با توضیحات دوستان کد شما به شکل زیر است : الیته آرایه در اینجا برعکس چاپ شده . یعنی اول ی در آرایه قرار گرفته.



private void button1_Click(object sender, EventArgs e)//r
{
string[] s = new string[] { "ا", "ب", "پ", "ت", "ث", "ج", "چ", "ح", "خ", "د", "ذ", "ر", "ز", "ژ", "س", "ش", "ص", "ض", "ط", "ظ", "ع", "غ", "ک", "گ", "ف", "ق", "ل", "م", "ن", "و", "ه", "ی" };
char[] c = textBox1.Text.ToCharArray();//a

int res = 0;//b
string members = "";//c

for (int i = 0; i < c.Length; i++)//f
{
for (int j = 0; j < s.Length; j++)//h
{
if (c[i].ToString() == s[j])//k
{
members += (j + 1) + "/";//g
res += (j + 1);//d
}
}

}
MessageBox.Show("ارقام حروف = " + members + " جمع اقام = " + res.ToString());
}

programerinfonet
چهارشنبه 19 مهر 1391, 11:13 صبح
دوست عزیز من اگه کد هر حرف رو خودم بدم یعنی مثلأ الف 1 باشه ب 5 یعنی به ترتیب نباشه چه طور ؟
ممنون

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 11:21 صبح
دوست عزیز من اگه کد هر حرف رو خودم بدم یعنی مثلأ الف 1 باشه ب 5 یعنی به ترتیب نباشه چه طور ؟
ممنون
به همون ترتیبی که هست بذار. مثلا اندیس صفر بشه الف و اندیس چهار بشه ب.

morteza271
چهارشنبه 19 مهر 1391, 11:23 صبح
دوست عزیز من اگه کد هر حرف رو خودم بدم یعنی مثلأ الف 1 باشه ب 5 یعنی به ترتیب نباشه چه طور ؟

گفتم که اعداد و حروف رو در یه آرایه ی دو بعدی ذخیره کن.
اینجوری میتونی به هر حرف عدد مورد نظر خودتو نسبت بدی و به ترتیب هم میتونه نباشه.

morteza271
چهارشنبه 19 مهر 1391, 11:24 صبح
به همون ترتیبی که هست بذار. مثلا اندیس صفر بشه الف و اندیس چهار بشه ب.
اینطوری درسته ولی اگه خواستن به یکی از حروف مثلا عدد 1000 رو نسبت بدن چی میشه؟!

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 11:31 صبح
اینطوری درسته ولی اگه خواستن به یکی از حروف مثلا عدد 1000 رو نسبت بدن چی میشه؟!

این حالت بحثش جداست. یا باید آرایه رو طولش رو اضافه کنن و کلی فضای الکی از دست بدن.

یا از HashTable استفاده کنن. می‌شه دیگه؟ فکر نکنم مشکلی باشه.

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 11:31 صبح
یه راه ساده دیگه هم هست که یه استراکت تعریف کنن و حرف و عدد متناظرش رو نگه دارن. بعد یه لیست از اون رو استفاده کنن.

morteza271
چهارشنبه 19 مهر 1391, 11:41 صبح
این همونی میشه که گفتم یک آرایه دو بعدی مثلا!!!!!!
پس نه نیازی به آرایه طولانی و فضای اضافی نیست!

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 11:46 صبح
این همونی میشه که گفتم یک آرایه دو بعدی مثلا!!!!!!
پس نه نیازی به آرایه طولانی و فضای اضافی نیست!

من جواب شما رو ندیده بودم. آرایه که عناصرش نمی‌تونه از دو جنس مختلف باشه. پس حرف و عدد رو نمی‌شه یه جا تعریف کرد. مگه اینکه اونجام جای حرف عددش در الفبا رو ذخیره کنیم و برای اینم که بفهمیم این عدد کدوم حرفه دوباره یه آرایه تعریف کنیم که حرف رو به عدد نسبت بده.

کدی هم که نوشته شده آرایه دو بعدی نداره.

malihehshajari
چهارشنبه 19 مهر 1391, 11:53 صبح
میتونید از از سوئیچ - کیس استفاده کنید
اول بجای حروف توی رشتتون مقادیر عددی رو جایگزین کنید بعد اون اعداد رو با هم جمع بزنید

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 11:55 صبح
میتونید از از سوئیچ - کیس استفاده کنید
اول بجای حروف توی رشتتون مقادیر عددی رو جایگزین کنید بعد اون اعداد رو با هم جمع بزنید
یعنی بیست و شش تا سوئیچ بذارن؟ جوابتون درسته، اما از لحاظ کدنویسی اصلا مقرون به صرفه نیست.

malihehshajari
چهارشنبه 19 مهر 1391, 12:01 عصر
من جواب شما رو ندیده بودم. آرایه که عناصرش نمی‌تونه از دو جنس مختلف باشه. پس حرف و عدد رو نمی‌شه یه جا تعریف کرد. مگه اینکه اونجام جای حرف عددش در الفبا رو ذخیره کنیم و برای اینم که بفهمیم این عدد کدوم حرفه دوباره یه آرایه تعریف کنیم که حرف رو به عدد نسبت بده.

کدی هم که نوشته شده آرایه دو بعدی نداره.

خب میتونه از همون آرایه دوبعدی استفاده کنه هم حروف و هم اعداد رو بصورت رشته توی آرایه قرار بده بعد وقتی خواست از مقدار عددی که بصورت رشته ذخیره شده استفاده کنه تبدیلش کنه به عدد

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 12:06 عصر
خب میتونه از همون آرایه دوبعدی استفاده کنه هم حروف و هم اعداد رو بصورت رشته توی آرایه قرار بده بعد وقتی خواست از مقدار عددی که بصورت رشته ذخیره شده استفاده کنه تبدیلش کنه به عدد

خب آره. اینم می‌شه. ولی یه جوریه!

همیشه می‌شه هر داده‌ای رو یه جور دیگه ذخیره کرد و هر جا لازم شد تبدیل کرد. من به شخصه دوس دارم مستقیم کار کنم. مگه اینکه یه جایی گیر کنم که همچین عملی سرعت کار رو خیلی بالا ببره و از پیچیدگی الگوریتم کم کنه.

HashTable اگه جواب بده که اصولا می‌ده، مساله به صورت مستقیم حل می‌شه. وگرنه می‌شه به قول شما و شاید troski عزیز، همه رو string تعریف کرد و خلاص.

در واقع HashTable همون آرایه‌ی دو بعدی هستش که رشته و عدد یه جا می‌تونن باشن. پس چرا رشته تعریف کنم و بعدا تبدیلش کنم به عدد؟

morteza271
چهارشنبه 19 مهر 1391, 12:11 عصر
دوست عزیز من نگفتم حتما از آرایه دو بعدی استفاده کنه گفتم مثلا آراه دو بعدی!
وگرنه اگه دوستمون بلد باشن بهتره از structها و لیست ها استفاده کنند که دیگه نیازی به تبدیل هم نداشته باشه!
ولی نباید در یه آرایه نگه دارند و براساس اندیس کار کنند.

البته من این حرفا رو زدم مطابق با نیاز دوستمون.طوریکه خودشون گفته بودن

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 12:18 عصر
دوست عزیز من نگفتم حتما از آرایه دو بعدی استفاده کنه گفتم مثلا آراه دو بعدی!
وگرنه اگه دوستمون بلد باشن بهتره از structها و لیست ها استفاده کنند که دیگه نیازی به تبدیل هم نداشته باشه!
ولی نباید در یه آرایه نگه دارند و براساس اندیس کار کنند.

البته من این حرفا رو زدم مطابق با نیاز دوستمون.طوریکه خودشون گفته بودن

منم آرایه رو اصلاح کردم به HashTable بر اساس سوالی که شما در مورد عدد هزار کردید. خب واقعا ممکنه یه نفر همچین تصمیمی داشته باشه. مثلا بخواد به اعداد ابجد تبدیل کنه. در این حالت HashTable رو پیشنهاد دادم.

مهرداد صفا
چهارشنبه 19 مهر 1391, 12:25 عصر
دوستان به نوشته ی زیر دقت کنید
الف=1 ب=2 پ=3 ت=4 ث=5 ج=6 چ=7 و ...
حالا میخوام وقتی تو تکست باکس وارد کردم " محمد " بیاد تک تک حروف محمد رو به عدد خودش تبدیلو در نهایت اعداد رو با هم جمع کنه و نتیجه رو به کاربر نمایش بده
چه طوری این کار رو بکنم
ممنون


سلام
میتوانید از یک dictionary استفاده کنید و مقدار مربوط به هر حرف را در آن ذخیره کنید و برای گرفتن مقدار متناظر با حرف کافیست حرف را به عنوان key به dictionary بدهید و مقدار آن را بگیرید. به عنوان مثال:

AddString(


string word)

{




int sum = 0;

Dictionary


<string ,int> CharValues=new Dictionary<string ,int>();

CharValues.Add(


"ا",1);

CharValues.Add(


"ب", 2);

CharValues.Add(


"ج", 3);

CharValues.Add(


"د", 4);




//CharValues.Add...




foreach( char c in word){

sum+=CharValues[c.ToString()];

}




return sum;

}

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 12:28 عصر
سلام
میتوانید از یک dictionary استفاده کنید و مقدار مربوط به هر حرف را در آن ذخیره کنید و برای گرفتن مقدار متناظر با حرف کافیست حرف را به عنوان key به dictionary بدهید و مقدار آن را بگیرید. به عنوان مثال:


خیلی ممنون از پاسختون. اما دقت می‌کردید ایشون خیلی وقته جوابشون رو گرفتن و رفتن! الان داریم با دوستمون حالات پیشرفته‌تر رو بررسی می‌کنیم که چطور می‌شه بهتر جواب گرفت. صاحب مجلس گذاشته رفته، ولی ما هستیم خدمتتون. :قهقهه:

morteza271
چهارشنبه 19 مهر 1391, 12:31 عصر
در مورد HashTable نظر خاضی ندارم!!!
میشه بیشتر توضیح بدین؟یا یه نمونه کد بذارین؟

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 12:34 عصر
در مورد HashTable نظر خاضی ندارم!!!
میشه بیشتر توضیح بدین؟یا یه نمونه کد بذارین؟

این پیوند رو تا آخر بخونید:

http://www.dotnetperls.com/hashtable

در واقع می‌شه به جای اندیس عددی هر جور اندیسی داشت. مثلا:



arr["B"]=2;

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 12:44 عصر
در واقع وقتی از هش استفاده می‌کنیم دسترسی به اندیس هر حرف مستقیمه و از مرتبه 1. پس کل جمله می‌شه از مرتبه n. همونطور که اول گفته بودم اون الگوریتم قبلی چون دسترسی به اندیس هر حرف خودش از مرتبه طول الفبا و شایدم بیشتر (با روش طول آرایه هزاری که من پیشنهاد دادم!) باشه، مرتبه‌ی کل می شه از مرتبه‌ی توان دو.

morteza271
چهارشنبه 19 مهر 1391, 12:44 عصر
روش جالبی هستش و کلا ایده مناسب! و به نظرم برای این کار مفیده و میشه ازش استفاده کرد.
خیلی خوب بود.
ممنون آقای اقدسی فام...

مهرداد صفا
چهارشنبه 19 مهر 1391, 12:47 عصر
خیلی ممنون از پاسختون. اما دقت می‌کردید ایشون خیلی وقته جوابشون رو گرفتن و رفتن! الان داریم با دوستمون حالات پیشرفته‌تر رو بررسی می‌کنیم که چطور می‌شه بهتر جواب گرفت. صاحب مجلس گذاشته رفته، ولی ما هستیم خدمتتون. :قهقهه:
سلامت باشید! استفاده میکنیم.
به هر حال فکر کردم روش ساده و قابل درکیست و ممکنه بعدها برای شخص دیگری هم مفید باشد.

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 12:54 عصر
سلامت باشید! استفاده میکنیم.
به هر حال فکر کردم روش ساده و قابل درکیست و ممکنه بعدها برای شخص دیگری هم مفید باشد.

قصدم شوخی بود. منظور خودش رفته ما ول نمی‌کنیم! به دل نگیرید یه وخ.

راستی troski جان، روشی هم که ایشون توضیح دادن تقریبا مشابه HashTable عمل می‌کنه و البته در این مورد خاص کاملا مثل هم هستن. من یادم نبود کلا.

morteza271
چهارشنبه 19 مهر 1391, 13:10 عصر
آره دقیقا همینطوره!

پس به نظر من روش های مناسب این کار این روش ها شد :

1- استفاده از HashTable
2- استفاده از Dictionary
3- استفاده از Struct و List

از نظر سرعت دسترسی به یک ایتم که مشخصه گزینه 1 و 2 باهم یکی هستند و از مرتبه 1 ولی در مورد 3 میشه n .

حالا به نظرتون کدومشون از نظر حافظه بهینه تره؟ البته تقریبا مشخصه که 1 و 2 از 3 بهتره ولی ایا بین 1 و 2 تفاوتی از نظر حافظه مصرفی وجود داره؟؟
با تشکر...

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 13:18 عصر
آره دقیقا همینطوره!

پس به نظر من روش های مناسب این کار این روش ها شد :

1- استفاده از HashTable
2- استفاده از Dictionary
3- استفاده از Struct و List

از نظر سرعت دسترسی به یک ایتم که مشخصه گزینه 1 و 2 باهم یکی هستند و از مرتبه 1 ولی در مورد 3 میشه n .

حالا به نظرتون کدومشون از نظر حافظه بهینه تره؟ البته تقریبا مشخصه که 1 و 2 از 3 بهتره ولی ایا بین 1 و 2 تفاوتی از نظر حافظه مصرفی وجود داره؟؟
با تشکر...

والا ابنو باید سایتی مثل stackoverflow پرسید و نظرات رو دید. البته خود مایکروسافت هم حتما توضیحی داره. من زیاد مطالعه نکردم. البته در مورد Hash یه جیزایی می‌دونم. اما کلیت تعریفش هست. اینکه #C چطور پیاده کرده ...

morteza271
چهارشنبه 19 مهر 1391, 13:24 عصر
آقا من الان که بیشتر بررسی کردم به یه مسئله ای رسیدم.
اونم اینکه به نظرم در اینجا Dictionary بهتر از Hashtable عمل میکنه!
به دو مثال زیر دقت کنید :
مثال اول : Dictionary
var dictionary = new Dictionary<string, int>();
dictionary.Add("one", 1);
dictionary.Add("two", 2);
dictionary.Add("Thirteen", 13);

int index = dictionary["Thirteen"];

مثال دوم : Hashtable
Hashtable hash = new Hashtable();
hash["one"] = 1;
hash["two"] = 2;
hash["Thirteen"] = 13;

int index = (int)hash["Thirteen"];

منظورمو متوجه شدین دیگه؟؟

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 13:27 عصر
آقا من الان که بیشتر بررسی کردم به یه مسئله ای رسیدم.
اونم اینکه به نظرم در اینجا Dictionary بهتر از Hashtable عمل میکنه!
به دو مثال زیر دقت کنید :
مثال اول : Dictionary
var dictionary = new Dictionary<string, int>();
dictionary.Add("one", 1);
dictionary.Add("two", 2);
dictionary.Add("Thirteen", 13);

int index = dictionary["Thirteen"];

مثال دوم : Hashtable
Hashtable hash = new Hashtable();
hash["one"] = 1;
hash["two"] = 2;
hash["Thirteen"] = 13;

int index = (int)hash["Thirteen"];

منظورمو متوجه شدین دیگه؟؟

آهان. چون اونجا نوع داده تعریف می‌شه دیگه لازم نیست تبدیل هم انجام بدیم.

آره خب این یه مزیته جایی مثل اینجا. یه جایی هم که ممکنه داده‌ها ترکیبی باشن اونیکی بهتره.

پس احتمالا این دو تا ساختارشون مثل همه. فقط در مورد روش مدیریت حافظه اختلاف دارن. نه؟

morteza271
چهارشنبه 19 مهر 1391, 13:38 عصر
پس احتمالا این دو تا ساختارشون مثل همه. فقط در مورد روش مدیریت حافظه اختلاف دارن. نه؟
آره دقیقا اینجوری به نظر میاد!

ولی هردوشون میشه گفت خیلی خوبن و در جاهای متفاوت می توان از هر کدوم که با کار مورد نظر بیشتر مطابقت داشت استفاده کرد.
آقا دمتون گرم....
امروز یه نکته جدید آموختم.....
ازتون ممنونم...
موفق باشید

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 13:47 عصر
آره منم یه چیزایی یاد گرفتم. با تشکر از همتون.