PDA

View Full Version : سوال: مقایسه کاراکتر با رشته



f_g1348
سه شنبه 20 تیر 1391, 11:02 صبح
با سلام
دوستان من کدی دارم که یک متن را از ورودی میگیرد و سپس کلمه به کلمه آنرا درون یک آرایه از جنس رشته می ریزد حالا من می خواهم تک تک این خانه های آرایه را با کاراکتر . مقایسه کنم وای وقتی دستور زیر را می نویسم ایراد می گیرد در ثانی وقتی می خواهم یک مقدار عددی را به مقدار تکست یک لیبل بریزم آنجا هم ایراد می گیرد .

int sentence_counter=0;
string[] Words_Of_Original = txt_Orig.Text.Split(new char[] { ' ', '\n' });//ریختن تک تک کلمات درون آرایه
for (int i = 0; i < txt_Orig.TextLength; i++)
{// شمارش جملات اولیه
if (Words_Of_Original[i] == '.')
{
sentence_counter += 1;
}
}// اتمام شمارش جملات اولیه

label3.Text = (sentence_counter).ToString;

tooraj_azizi_1035
سه شنبه 20 تیر 1391, 11:26 صبح
سلام
برای مقایسه می تونی از هر روش که می خوای استفاده کنی:

// Internal strings that will never be localized.
string root = @"C:\users";
string root2 = @"C:\Users";

// Use the overload of the Equals method that specifies a StringComparison.
// Ordinal is the fastest way to compare two strings.
bool result = root.Equals(root2, StringComparison.Ordinal);

Console.WriteLine("Ordinal comparison: {0} and {1} are {2}", root, root2,
result ? "equal." : "not equal.");

// To ignore case means "user" equals "User". This is the same as using
// String.ToUpperInvariant on each string and then performing an ordinal comparison.
result = root.Equals(root2, StringComparison.OrdinalIgnoreCase);
Console.WriteLine("Ordinal ignore case: {0} and {1} are {2}", root, root2,
result ? "equal." : "not equal.");

// A static method is also available.
bool areEqual = String.Equals(root, root2, StringComparison.Ordinal);




دوم :
label3.Text = sentence_counter.ToString;


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


int count=txt_Orig.Text.Count(ch => ch=='.');



کد بالا با استفاده از Lambda Expression بود این کد با LINQ کار می کنه:


class QueryAString
{
static void Main()
{
string aString = "ABCDE9.N..454";

// Select only those characters that are numbers
IEnumerable<char> stringQuery =
from ch in aString
where ch== '.'
select ch;

// Call the Count method on the existing query.
int count = stringQuery.Count();
Console.WriteLine("Count = {0}", count);

}
}
/* Output:

Count = 3

*/

sirvan-me
سه شنبه 20 تیر 1391, 11:49 صبح
چون اصولا نقطه انتها رو به کلمه ی آخر جمله می چسبونن با این کد نمیتونی به جواب برسی من این کد رو نوشتم جواب گرفتم ... شمام امتحان کن :

private void button1_Click(object sender, EventArgs e)
{
int Count = 0;
string[] Strs = txt_Orig.Text.Split(new char[] { ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string str in Strs)
{
if (str.Contains('.'))
{
Count++;
}
}

label1.Text = Count.ToString();
}

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

f_g1348
شنبه 24 تیر 1391, 07:34 صبح
خوب دوستان حالا اگه بخواهم یک کاراکتر را با یک رشته مقایسه کنم چه باید بکنم ؟
فرض کنیم که str آرایه ای از جنس رشته باشد و بخواهم حتماً به این روش عمل کنم که تکتک خانه های آرایه را با کاراکتر نقطه مقایسه کنم

if (str[i]=='.')

Mahmoud.Afrad
شنبه 24 تیر 1391, 09:14 صبح
قصدت از انجام این کار چیه؟ تعداد نقطه؟ تشخیص انتهای جمله؟ ....؟؟؟؟

برای مقایسه هم میتونی با رشتهء تک کاراکتری نقطه مقایسه کنی
if (str[i]==".")