با سلام
من یه سوال دارم که چطور میتونم محتوای دو رشته رو با هم مقایسه کنم؟
مثلا یه رشته دارم "abcdef" و رشته دوم "abuio" حالا میخوام کاراکتر به کاراکتر با رشته ی اول مقایسه بشه و بگه ایا اعضای رشته ی دوم در اولی هست یا نه؟
با سلام
من یه سوال دارم که چطور میتونم محتوای دو رشته رو با هم مقایسه کنم؟
مثلا یه رشته دارم "abcdef" و رشته دوم "abuio" حالا میخوام کاراکتر به کاراکتر با رشته ی اول مقایسه بشه و بگه ایا اعضای رشته ی دوم در اولی هست یا نه؟
با compare to می تونی دو رشته رو با هم مقایسه کنی . البته فقط به شما می گه که دو رشته مثل هم هستند یا نه . به مثال زیر نگاه کنید
string name1 = "saeed";
MessageBox.Show (Convert.ToString(name1.CompareTo("hasan")));
شما بهتره دو تا آرایه درست کنید . حروف رشته هاتون رو داخل اون ها بریزید . بعد خانه به خانه اون ها رو با هم مقایسه کنید . از این طریق می تونید تعداد حروف یکسان ، جابه جایی اون ها بر اثر خطای سهوی و غیره رو هم بررسی کنید . اگر واجبه و براتون مشکله من یک sample براتون آماده کنم .
دوست عزیز فکر میکنم این بتونه بهت کمک کنه
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 داری که توش هر کاراکتر و تعداد اون در رشته دوم رو ذخیره کرده
1. کلاس hashtabl درواقع یک آرایه دوبعدی است که عناصر آن از نوع object بوده و هرچیزی که به آن اضافه کنی , نگه می دارد و محدودیتی در تعداد عناصر ندارد.
2. ;(ar.Add(ch1, count معنی اش این است که یک ردیف به آرایه اضافه کن که مقادیر آن نیز محتویات ch1 , count می باشد.
3. ch1 در هر اجرای حلقه اول کاراکترهای موجود در رشته a را می گیرد ( رجوع شود به توضیحات کلمه کلیدی foreach ) که به ترتیب در هر اجرای حلقه حروف a, b, c, d, e, f را می گیرد و زمانی که به انتهای رشته می رسد اجرای حلقه به اتمام می رسد. همین امر در خصوص ch2 نیز صادق است با این تفاوت که حروف مربوط به رشته b را میگیرد.
alireza1384 بعضی از سوالات رو جواب داد
اما با یک حلقه میتونی هر کاراکتر و تعداد اون در رشته دوم رو بدست بیاری
سوالی بود در خدمتم
واقعا از شما ممنونم
چون اقای ارژنگ اشاره کردن که این سوال تفریحیه یا کاربردی داره یا نه من میگم هدفم چی بود من میخوام رشته ی ورودی که کاربر وارد کرده با کل حروف الفبای انگلیسی مقایسه بشه
و بگه ایا کل رشته ی وارد شده حرف هست یا نه؟ ایا باید یه رشته شامل کل حروف بگیرم. با رشته ی ورودی مقایسه کنم؟ یا راه بهتری هم هست که کوتاهتر باشه؟
چرا بدبین؟ سوال جالبی است که ندیدم برایه کارهایه معمولی استفاده بشه،
اصلا هم به نظر سوال تازهکاری نیامد، تازه یکمی زیادی هم بخصوص بود . حالا چرا این ۵ خط را دِر نظر نگرفتین :
یک سوال اگر abcdef
را با axbxef مقایسه کنید جواب اینکه کدام اعضا در هردو هستند میشه کدام یکی از اینها؟
a,b,e,f ،
abef ،
a,b,ef و یا یکچیزه دیگر؟
و فقط به "تفریحی" متمرکز شدید، من تازهکار حالیم نیست، با همه مانند اینکه متخصصاند برخورد میکنم، اینکه چطوری از چیزی که گفتم اینکه با یک تازه کار دارم برخورد میکنم را استنباط کردید را درک نیمکنم. با یک متخصص هم دقیقا سوال را همانطوی که پرسیدم میپرسیدم.
و سوال تفریحی هم هیچ چیزه بدی نیست، در انگلیسی ما بهش میگیم coding for fun و کلی هم کیف میده.
دلیل پرسیدن این بود که اگر این برایه یک کار بخصوصی است با در نظر گرفتن شرائط جواب بدیم.
ولی اگر برایه تفریح است )خودم همیشه کلی چیز برایه تفریح مینویسم(، اونوقت بدانیم که فقط برایه یادگرفتن همین چیزه بخصوص است.
در ضمن تفریحی میشه از جدی بیشتر یاد گرفت و خیلی هم خوبه، کاشکی به جایه ناراحت شدن از سوالم در مورد احتیاج به چنین چیزی توضیح میدادید.
آخرین ویرایش به وسیله اَرژنگ : پنج شنبه 21 آبان 1388 در 00:36 صبح
وقتی که سوال را اینطوری بگید)هدفتان را بیان کنید( راحتر میشه جواب داد.
http://www.c-sharpcorner.com/UploadF...RegExpPSD.aspx
public bool IsAlpha(String strToCheck)
{
Regex objAlphaPattern=new Regex("[^a-zA-Z]");
return !objAlphaPattern.IsMatch(strToCheck);
}
نه بابا چه ناراحتی، منه پیرمرد اونقدر کتک خوردم تا به اینجا رسیدم
این متد چک میکنه که اعضایی که در رشته هستند مابین a-z و A-Z باشند :[^a-zA-Z]
در همان لینک مثلهایه دیگری هستند که مقایسه میکنند که هر کدام از اجزا رشته حتماً مابین ۰ تا ۹ باشند (یعنی اینکه رشته همش عدده) و یا حالتهایه دیگر.
تنها کاری که باید انجام بدید ، رشته در تکست باکس را به این متد میدید و اگر همشان حروف مابین a تا z (چه کاپیتال و یا کوچک باشند) درست و یا غلط برمیگرداند، یعنی یکچیزی به این شکل :
if (IsAlpha(textBox1.Text))
{
//فقط حروف است
}
else
{
//فقط حروف نیست
}
syyntax این
("[^a-zA-Z]");
رو من نفهمیدم
syntax چطوریه؟
Quantifiers,Metacharacters http://msdn.microsoft.com/en-us/library/ms972966.aspx
خیلی ممنون جناب ارژنگ واقعا ممنون
اگه باز اشکال داشتم میتونم رو کمکتون حساب کنم؟!
با شرمندگی من یه کم تازه کارم
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")
}
}
من این کد رو نوشتم که یه دکمه داره و یه تکس باکس
ورودی که به تکس باکس داده میشه اول بر حسب کاراکتر اسپیس جدا میشه داخل یه رشته قرار میگیره
بعد مقایسه میشه یه خطاهای عجیب غریب میده که به صحت منطق کد شک کردم میشه یه نگاه بندازین؟
فقط من همه ی کد رو داخل باتن (دکمه) نوشتم ایا درسته؟کدی که معرفی کرده بودین داخل باتن نوشتم درسته؟
خیلی شرمنده
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);
}
}