PDA

View Full Version : یه سوال ساده در مورد رشته ها



Rasilinkof
دوشنبه 18 آبان 1388, 10:55 صبح
با سلام
من یه سوال دارم که چطور میتونم محتوای دو رشته رو با هم مقایسه کنم؟
مثلا یه رشته دارم "abcdef" و رشته دوم "abuio" حالا میخوام کاراکتر به کاراکتر با رشته ی اول مقایسه بشه و بگه ایا اعضای رشته ی دوم در اولی هست یا نه؟

sa_ghaznavi
دوشنبه 18 آبان 1388, 11:47 صبح
با compare to می تونی دو رشته رو با هم مقایسه کنی . البته فقط به شما می گه که دو رشته مثل هم هستند یا نه . به مثال زیر نگاه کنید
string name1 = "saeed";
MessageBox.Show (Convert.ToString(name1.CompareTo("hasan")));

far9090
دوشنبه 18 آبان 1388, 12:39 عصر
شما بهتره دو تا آرایه درست کنید . حروف رشته هاتون رو داخل اون ها بریزید . بعد خانه به خانه اون ها رو با هم مقایسه کنید . از این طریق می تونید تعداد حروف یکسان ، جابه جایی اون ها بر اثر خطای سهوی و غیره رو هم بررسی کنید . اگر واجبه و براتون مشکله من یک sample براتون آماده کنم .

Rasilinkof
سه شنبه 19 آبان 1388, 15:41 عصر
شما بهتره دو تا آرایه درست کنید . حروف رشته هاتون رو داخل اون ها بریزید . بعد خانه به خانه اون ها رو با هم مقایسه کنید . از این طریق می تونید تعداد حروف یکسان ، جابه جایی اون ها بر اثر خطای سهوی و غیره رو هم بررسی کنید . اگر واجبه و براتون مشکله من یک sample براتون آماده کنم .

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

saed2006
سه شنبه 19 آبان 1388, 15:57 عصر
دوست عزیز فکر میکنم این بتونه بهت کمک کنه


string a = "abcdef";
string b = "abuio";
Hashtable ar = new Hashtable();
int count = 0;
foreach (char ch1 in a)
{
foreach (char ch2 in b)
{
if (ch1 == ch2)
{
count += 1;
}
}
if (!ar.ContainsKey(ch1))
{
ar.Add(ch1, count);
}
count = 0;
}


در نهایت hashtabl داری که توش هر کاراکتر و تعداد اون در رشته دوم رو ذخیره کرده

Rasilinkof
چهارشنبه 20 آبان 1388, 11:09 صبح
دوست عزیز فکر میکنم این بتونه بهت کمک کنه


string a = "abcdef";
string b = "abuio";
Hashtable ar = new Hashtable();
int count = 0;
foreach (char ch1 in a)
{
foreach (char ch2 in b)
{
if (ch1 == ch2)
{
count += 1;
}
}
if (!ar.ContainsKey(ch1))
{
ar.Add(ch1, count);
}
count = 0;
}


در نهایت hashtabl داری که توش هر کاراکتر و تعداد اون در رشته دوم رو ذخیره کرده


دوست عزیز خیلی از شما ممنونم واقعا لطف کردی
فقط من راجع به کلاس hashtabl یه چیزایی خوندم ولی درست متوجه نشدم این کلاس چی رو نگه میداره؟
ar.Add(ch1, count); معنی اش چی هست؟
و اینکه ch1 و ch2 حاوی چه چیزی هستند؟و اگه بخوام میتونم محتویات انها رو نشون بدم؟

alireza1384
چهارشنبه 20 آبان 1388, 13:56 عصر
دوست عزیز خیلی از شما ممنونم واقعا لطف کردی
فقط من راجع به کلاس hashtabl یه چیزایی خوندم ولی درست متوجه نشدم این کلاس چی رو نگه میداره؟
ar.Add(ch1, count); معنی اش چی هست؟
و اینکه ch1 و ch2 حاوی چه چیزی هستند؟و اگه بخوام میتونم محتویات انها رو نشون بدم؟

1. کلاس hashtabl درواقع یک آرایه دوبعدی است که عناصر آن از نوع object بوده و هرچیزی که به آن اضافه کنی , نگه می دارد و محدودیتی در تعداد عناصر ندارد.
2. ;(ar.Add(ch1, count معنی اش این است که یک ردیف به آرایه اضافه کن که مقادیر آن نیز محتویات ch1 , count می باشد.
3. ch1 در هر اجرای حلقه اول کاراکترهای موجود در رشته a را می گیرد ( رجوع شود به توضیحات کلمه کلیدی foreach ) که به ترتیب در هر اجرای حلقه حروف a, b, c, d, e, f را می گیرد و زمانی که به انتهای رشته می رسد اجرای حلقه به اتمام می رسد. همین امر در خصوص ch2 نیز صادق است با این تفاوت که حروف مربوط به رشته b را میگیرد.

اَرژنگ
چهارشنبه 20 آبان 1388, 14:07 عصر
با سلام
من یه سوال دارم که چطور میتونم محتوای دو رشته رو با هم مقایسه کنم؟
مثلا یه رشته دارم "abcdef" و رشته دوم "abuio" حالا میخوام کاراکتر به کاراکتر با رشته ی اول مقایسه بشه و بگه ایا اعضای رشته ی دوم در اولی هست یا نه؟

یک سوال اگر abcdef
را با axbxef مقایسه کنید جواب اینکه کدام اعضا در هردو هستند میشه کدام یکی از اینها؟
a,b,e,f ،
abef ،
a,b,ef و یا یکچیزه دیگر؟
این یک سوال تفریحیه و یا اینکه برایه کار بخصوصی قرار است استفاده بشه؟

saed2006
چهارشنبه 20 آبان 1388, 15:34 عصر
alireza1384 بعضی از سوالات رو جواب داد
اما با یک حلقه میتونی هر کاراکتر و تعداد اون در رشته دوم رو بدست بیاری
سوالی بود در خدمتم

Rasilinkof
چهارشنبه 20 آبان 1388, 15:56 عصر
یک سوال اگر abcdef
را با axbxef مقایسه کنید جواب اینکه کدام اعضا در هردو هستند میشه کدام یکی از اینها؟
a,b,e,f ،
abef ،
a,b,ef و یا یکچیزه دیگر؟
این یک سوال تفریحیه و یا اینکه برایه کار بخصوصی قرار است استفاده بشه؟

به نظر شما چرا باید با یه سوال تفریحی وقت خودم و دیگران رو بگیرم؟ که چی بشه؟
شما چرا انقدر بد بین هستین؟
همه مثل شما برنامه نویسی شون عالی نیست بعضی مثل من تازه کارن و طبیعی هست
که سوال شون به نظر شما تفریحی بیاد!

Rasilinkof
چهارشنبه 20 آبان 1388, 15:59 عصر
1. کلاس hashtabl درواقع یک آرایه دوبعدی است که عناصر آن از نوع object بوده و هرچیزی که به آن اضافه کنی , نگه می دارد و محدودیتی در تعداد عناصر ندارد.
2. ;(ar.Add(ch1, count معنی اش این است که یک ردیف به آرایه اضافه کن که مقادیر آن نیز محتویات ch1 , count می باشد.
3. ch1 در هر اجرای حلقه اول کاراکترهای موجود در رشته a را می گیرد ( رجوع شود به توضیحات کلمه کلیدی foreach ) که به ترتیب در هر اجرای حلقه حروف a, b, c, d, e, f را می گیرد و زمانی که به انتهای رشته می رسد اجرای حلقه به اتمام می رسد. همین امر در خصوص ch2 نیز صادق است با این تفاوت که حروف مربوط به رشته b را میگیرد.


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

Rasilinkof
چهارشنبه 20 آبان 1388, 16:01 عصر
1. کلاس hashtabl درواقع یک آرایه دوبعدی است که عناصر آن از نوع object بوده و هرچیزی که به آن اضافه کنی , نگه می دارد و محدودیتی در تعداد عناصر ندارد.
2. ;(ar.Add(ch1, count معنی اش این است که یک ردیف به آرایه اضافه کن که مقادیر آن نیز محتویات ch1 , count می باشد.
3. ch1 در هر اجرای حلقه اول کاراکترهای موجود در رشته a را می گیرد ( رجوع شود به توضیحات کلمه کلیدی foreach ) که به ترتیب در هر اجرای حلقه حروف a, b, c, d, e, f را می گیرد و زمانی که به انتهای رشته می رسد اجرای حلقه به اتمام می رسد. همین امر در خصوص ch2 نیز صادق است با این تفاوت که حروف مربوط به رشته b را میگیرد.

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

اَرژنگ
پنج شنبه 21 آبان 1388, 00:07 صبح
به نظر شما چرا باید با یه سوال تفریحی وقت خودم و دیگران رو بگیرم؟ که چی بشه؟
شما چرا انقدر بد بین هستین؟
همه مثل شما برنامه نویسی شون عالی نیست بعضی مثل من تازه کارن و طبیعی هست
که سوال شون به نظر شما تفریحی بیاد!

چرا بدبین؟ سوال جالبی است که ندیدم برایه کارهایه معمولی استفاده بشه،

اصلا هم به نظر سوال تازه‌کاری نیامد، تازه یکمی زیادی هم بخصوص بود . حالا چرا این ۵ خط را دِر نظر نگرفتین :

یک سوال اگر abcdef
را با axbxef مقایسه کنید جواب اینکه کدام اعضا در هردو هستند میشه کدام یکی از اینها؟
a,b,e,f ،
abef ،
a,b,ef و یا یکچیزه دیگر؟

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

و سوال تفریحی هم هیچ چیزه بدی نیست، در انگلیسی ما بهش میگیم coding for fun و کلی هم کیف میده.
دلیل پرسیدن این بود که اگر این برایه یک کار بخصوصی است با در نظر گرفتن شرائط جواب بدیم.
ولی اگر برایه تفریح است )خودم همیشه کلی چیز برایه تفریح مینویسم(، اونوقت بدانیم که فقط برایه یادگرفتن همین چیزه بخصوص است.
در ضمن تفریحی میشه از جدی بیشتر یاد گرفت و خیلی هم خوبه، کاشکی به جایه ناراحت شدن از سوالم در مورد احتیاج به چنین چیزی توضیح میدادید.

اَرژنگ
پنج شنبه 21 آبان 1388, 00:16 صبح
خیلی از شما ممنون
ببینید من میحوام رشته ای که کاربر وارد کرده با حروف الفبای انگلیسی مقایسه بشه و بگه ایا رشته ی وارد شده کلا حرف هست یا نه؟
ایا باید برای کل حروف یه رشته در نظر بگیرم و با رشته ی ورودی مقایسه کنم؟ یا راه ساده تری هم هست؟

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

http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx



public bool IsAlpha(String strToCheck)
{
Regex objAlphaPattern=new Regex("[^a-zA-Z]");
return !objAlphaPattern.IsMatch(strToCheck);
}

Rasilinkof
پنج شنبه 21 آبان 1388, 15:37 عصر
وقتی که سوال را اینطوری بگید)هدفتان را بیان کنید( راحتر میشه جواب داد.

http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx



public bool IsAlpha(String strToCheck)
{
Regex objAlphaPattern=new Regex("[^a-zA-Z]");
return !objAlphaPattern.IsMatch(strToCheck);
}

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

اَرژنگ
پنج شنبه 21 آبان 1388, 16:44 عصر
سلام
ممنون از توضیحی که دادین.امیدوارم ازم ناراحت نشده باشین.خوشحالم که متوجه منظورم شدین
فقط من این کد رو نفهمیدم . ببینید کاربر یه رشته از تکس باکس وارد میکنه و میخوام با الفبا مقایسه بشه ممکنه بیشتر توضیح بدی؟ خیلی لازمش دارم

نه بابا چه ناراحتی، منه پیرمرد اونقدر کتک خوردم تا به اینجا رسیدم :لبخند:

این متد چک میکنه که اعضایی که در رشته هستند مابین a-z و A-Z باشند :[^a-zA-Z]
در همان لینک مثلهایه دیگری هستند که مقایسه میکنند که هر کدام از اجزا رشته حتماً مابین ۰ تا ۹ باشند (یعنی اینکه رشته همش عدده) و یا حالتهایه دیگر.
تنها کاری که باید انجام بدید ، رشته در تکست باکس را به این متد میدید و اگر همشان حروف مابین a تا z (چه کاپیتال و یا کوچک باشند) درست و یا غلط برمیگرداند، یعنی یکچیزی به این شکل :


if (IsAlpha(textBox1.Text))
{
//فقط حروف است
}
else
{
//فقط حروف نیست
}

saed2006
پنج شنبه 21 آبان 1388, 18:00 عصر
syyntax این
("[^a-zA-Z]");
رو من نفهمیدم
syntax چطوریه؟

اَرژنگ
پنج شنبه 21 آبان 1388, 23:08 عصر
syyntax این
("[^a-zA-Z]");
رو من نفهمیدم
syntax چطوریه؟

Quantifiers,Metacharacters http://msdn.microsoft.com/en-us/library/ms972966.aspx

Rasilinkof
جمعه 22 آبان 1388, 13:11 عصر
خیلی ممنون جناب ارژنگ واقعا ممنون
اگه باز اشکال داشتم میتونم رو کمکتون حساب کنم؟!
با شرمندگی من یه کم تازه کارم:خجالت:

Rasilinkof
سه شنبه 26 آبان 1388, 11:30 صبح
نه بابا چه ناراحتی، منه پیرمرد اونقدر کتک خوردم تا به اینجا رسیدم :لبخند:

این متد چک میکنه که اعضایی که در رشته هستند مابین a-z و A-Z باشند :[^a-zA-Z]
در همان لینک مثلهایه دیگری هستند که مقایسه میکنند که هر کدام از اجزا رشته حتماً مابین ۰ تا ۹ باشند (یعنی اینکه رشته همش عدده) و یا حالتهایه دیگر.
تنها کاری که باید انجام بدید ، رشته در تکست باکس را به این متد میدید و اگر همشان حروف مابین a تا z (چه کاپیتال و یا کوچک باشند) درست و یا غلط برمیگرداند، یعنی یکچیزی به این شکل :


if (IsAlpha(textBox1.Text))
{
//فقط حروف است
}
else
{
//فقط حروف نیست
}




public bool IsAlpha(String strToCheck)
{
Regex objAlphaPattern=new Regex("[^a-zA-Z]");
return !objAlphaPattern.IsMatch(strToCheck);
}
public bool IsWholeNumber(String strNumber)
{
Regex objNotWholePattern=new Regex("[^0-9]");
return !objNotWholePattern.IsMatch(strNumber);
}
string[] st = null;
string[] x, y, z, t = null;
st = textBox1.Text.Split(new char[] { ' ' });

for(int i=0;i<4;i++)
{
if (IsAlpha(st[i]))
{
messagebox.show("alphabet")

}
else if(IsWholeNumber(st[i]))
{
messagebox.show("number")
}
else
messagebox.show("error")

}
}
من این کد رو نوشتم که یه دکمه داره و یه تکس باکس
ورودی که به تکس باکس داده میشه اول بر حسب کاراکتر اسپیس جدا میشه داخل یه رشته قرار میگیره
بعد مقایسه میشه یه خطاهای عجیب غریب میده که به صحت منطق کد شک کردم میشه یه نگاه بندازین؟
فقط من همه ی کد رو داخل باتن (دکمه) نوشتم ایا درسته؟کدی که معرفی کرده بودین داخل باتن نوشتم درسته؟
خیلی شرمنده

اَرژنگ
جمعه 29 آبان 1388, 06:55 صبح
using System.Text.RegularExpressions;
public bool IsAlpha(String strToCheck)
{
Regex objAlphaPattern = new Regex("[^a-zA-Z]");
return !objAlphaPattern.IsMatch(strToCheck);
}
public bool IsWholeNumber(String strNumber)
{
Regex objNotWholePattern = new Regex("[^0-9]");
return !objNotWholePattern.IsMatch(strNumber);
}
private void ShowWhatIsIt(string text)
{
if (IsAlpha(text))
{
MessageBox.Show("alphabet");
}
else if (IsWholeNumber(text))
{
MessageBox.Show("number");
}
else
MessageBox.Show("Not a number of a Alphabet");
}
private void button1_Click(object sender, EventArgs e)
{
ShowWhatIsIt(textBox1.Text);
}
}