PDA

View Full Version : سوال: چک کردن وجود حداقل دو کاراکتر در رشته



yekta99
دوشنبه 09 مرداد 1391, 11:44 صبح
سلام دوستان

من میخوام توی یه سری رشته، رشته هایی رو که حداقل دو کاراکتر خاص رو دارند پیدا کنم ، مثلا اسم هایی که از حروف a,o,u,e,i حداقل دو حرف رو داشته باشند رو جدا کنم .

برای یک کاراکتر دستور زیر رو نوشتم ولی برای چک کردن کاراکترهای بیشتر نمیدونم چی باید بنویسم ؟

var r =
from nam in lst
where nam.Name.Contains("a") || nam.Name.Contains("e") || nam.Name.Contains("i") ||
nam.Name.Contains("o") || nam.Name.Contains("u")
orderby nam.Name.First() descending
select new { };

ali_habibi1384
دوشنبه 09 مرداد 1391, 12:03 عصر
با تابع Split متنتو تبديل به آرايه كن كاراكتر split هم space قرار بده. يه for بذار از اول تا آخر آرايه رو تك تك روي حروفها ببين كاركترها موجود هستند يا نه. هر كاراكتري كه موجود بود به متغيرت يكي اضافه كن. اگر نتونستي بگو برنامشو برات بذارم.

Saman_12
دوشنبه 09 مرداد 1391, 12:20 عصر
regex :

\b((\w*[aouei]\w*){2,})\b

yekta99
دوشنبه 09 مرداد 1391, 13:42 عصر
با تابع Split متنتو تبديل به آرايه كن كاراكتر split هم space قرار بده. يه for بذار از اول تا آخر آرايه رو تك تك روي حروفها ببين كاركترها موجود هستند يا نه. هر كاراكتري كه موجود بود به متغيرت يكي اضافه كن. اگر نتونستي بگو برنامشو برات بذارم.

ممنون دوست عزیز ،
من رشته هام رو از یه کلاس با یه حلقه for از کاربر می گیریم و توی لیست ذخیره می کنم ، برای تبدیل متن به آرایه این کد رو نوشتم :
Students st = new Students();
string[] str = st.Name.Split(' ');
ولی نمیدونم برای چک کردن منظورتون اینه که برای هر حرف یه if بذارم ؟؟؟
for (int i = 0; i < str.Length; i++)
{
if (str.Contains("a"))

if (str.Contains("e"))

//??
}

متغیر رو چی بذارم ؟

ممنون میشم اگه کدش رو برام بذارید ، میخوام نتیجه رو با دستور linq نشون بدم .

yekta99
دوشنبه 09 مرداد 1391, 13:45 عصر
regex :

\b((\w*[aouei]\w*){2,})\b

متشکرم

میشه یه کم در موردش توضیح بدید .

Saman_12
دوشنبه 09 مرداد 1391, 14:00 عصر
string all = "this a sample text for using in regex matches" ;
string pattern = @"\b((\w*[aouei]\w*){2,})\b";
Regex regex = new Regex(pattern);

foreach (Match match in regex.Matches(all))
{
Console.WriteLine("match: {0}", match.Value);
}

yekta99
دوشنبه 09 مرداد 1391, 14:34 عصر
string all = "this a sample text for using in regex matches" ;
string pattern = @"\b((\w*[aouei]\w*){2,})\b";
Regex regex = new Regex(pattern);

foreach (Match match in regex.Matches(all))
{
Console.WriteLine("match: {0}", match.Value);
}
ممنون از جوابتون.

ولی من رشته ها رو از کاربر می گیرم ، این کد چیزی رو برنگردوند و این پیغام رو میده value cannot be null .

Saman_12
دوشنبه 09 مرداد 1391, 15:23 عصر
این یه مثال واسه استفاده :

yekta99
دوشنبه 09 مرداد 1391, 17:12 عصر
ممنون دوست عزیز ولی نتونستم از این برنامه استفاده کنم .
من فعلا دارم توی محیط console کار می کنم (تمرین می کنم) ، همونطور که گفتم از کاربر ورودی هام رو می گیرم ،
کد زیر :
class Students
{
public int ID;
public string Name, Family;

}

static void Main(string[] args)
{


Console.Write("Number of Student?");
int num = int.Parse(Console.ReadLine());


List<Students> lst = new List<Students>();

for (int i = 0; i < num; i++)
{
Students st = new Students();
Console.Write("Name?");
st.Name = Console.ReadLine();
Console.Write("Family?");
st.Family = Console.ReadLine();
Console.Write("ID?");
st.ID = int.Parse(Console.ReadLine());
lst.Add(st);
}

}

و میخوام اسم هایی رو که حداقل دو کاراکتر صدادار داخلشون هست رو با دستورات linq برگردونم ، برای یک کارکتر رو با کدی که بالا گذاشتم چک کردم ولی بیشتر رو نمیدونم باید چجوری چک کنم .

Saman_12
دوشنبه 09 مرداد 1391, 17:44 عصر
شاید این کمک کنه :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Console_Student
{
class Program
{
static void Main(string[] args)
{
Console.Write("Number of Student?");
int num = int.Parse(Console.ReadLine());


List<Students> lst = new List<Students>();
string pattern = @"\b((\w*[aouei]\w*){2,})\b";
Regex regex = new Regex(pattern);


for (int i = 0; i < num; i++)
{
Students st = new Students();
Console.Write("Name?");
st.Name = Console.ReadLine();
Console.Write("Family?");
st.Family = Console.ReadLine();
Console.Write("ID?");
st.ID = int.Parse(Console.ReadLine());
lst.Add(st);
}

foreach (Students st in lst)
{
foreach (Match match in regex.Matches(st.Name))
{
Console.WriteLine("match: {0}", match.Value);
}
}
Console.Read();
}
}

class Students
{
public int ID;
public string Name, Family;

}
}

ali_habibi1384
دوشنبه 09 مرداد 1391, 18:23 عصر
ممنون دوست عزیز ،
من رشته هام رو از یه کلاس با یه حلقه for از کاربر می گیریم و توی لیست ذخیره می کنم ، برای تبدیل متن به آرایه این کد رو نوشتم :
Students st = new Students();
string[] str = st.Name.Split(' ');
ولی نمیدونم برای چک کردن منظورتون اینه که برای هر حرف یه if بذارم ؟؟؟
for (int i = 0; i < str.Length; i++)
{
if (str.Contains("a"))

if (str.Contains("e"))

//??
}

متغیر رو چی بذارم ؟

ممنون میشم اگه کدش رو برام بذارید ، میخوام نتیجه رو با دستور linq نشون بدم .
نه دوست عزيز برعكس فهميدي. حلقه for اينجوري ميشه:


int k=0;
for ( int i=0;i<str.length;i++)
{
for (int j=0,k=0;j<str[i].length;j++)
if ("aeuoi".contains(str[i])) k++;
if ( k>1) يعني اين كلمه بيشتر از دوبار از اون حرفاي پركاربرد داره و بقيه عملياتت
}

Mahmoud.Afrad
دوشنبه 09 مرداد 1391, 20:12 عصر
با LINQ به اینصورت میتونی جواب بگیری
int count = textBox1.Text.Count(i => i.ToString().ToLower() == "a" || i.ToString().ToLower() == "e" || i.ToString().ToLower() == "i" || i.ToString().ToLower() == "o" || i.ToString().ToLower() == "u");
if (count >= 2)
{
// ...
}