PDA

View Full Version : سوال: پيدا كردن عدد در يك رشته



s_mokhtari
پنج شنبه 18 شهریور 1389, 17:21 عصر
سلام
دوستان من ميخوام داخل يه رشته به اولين عدد كه برخوردم مكانشو پيدا كنم و از اونجا دوباره بگردم و هرچي عدد دوباره قبل از رشته دارم رو پيدا كنم
asd235h9j
يعني از عدد 2 كه پيدا كرد تا قبل h كه همش عدد رو برگردونه
مقدار برگشتي:235
ممنون:بوس:

Saman_12
پنج شنبه 18 شهریور 1389, 18:52 عصر
private void SplitNumber(String Str)
{
string Str = "asd235hs9j";
int NewNumber;
int NumStart = System.Convert.ToInt32(0);
int NumFinish = System.Convert.ToInt32(0);

bool Bo = System.Convert.ToBoolean(false);
bool Bo1 = System.Convert.ToBoolean(false);

for (int I = 1; I <= Str.Length; I++)
{
if (Information.IsNumeric(Str.Substring(I - 1, 1)) == true && Bo == false)
{
NumStart = I;
Bo = true;
}
}

for (int N = NumStart; N <= Str.Length; N++)
{
if (Information.IsNumeric(Str.Substring(N - 1, 1)) == false && Bo1 == false)
{
NumFinish = N;
Bo1 = true;
}
}

NewNumber = int.Parse(Str.Substring(NumStart - 1, NumFinish - NumStart));

}

persian_bigboy
پنج شنبه 18 شهریور 1389, 18:59 عصر
دوست من سلام . من با vb.net کار میکنم و یک دستور هست به نام MID به جای اینکه SUBSTRING کنی بهتره که از یک دستور شبیه به آن استفاده کنی . مرسی

Saman_12
پنج شنبه 18 شهریور 1389, 19:16 عصر
دوست من سلام . من با vb.net کار میکنم و یک دستور هست به نام MID به جای اینکه SUBSTRING کنی بهتره که از یک دستور شبیه به آن استفاده کنی . مرسی

دوست عزیز شما اگه یک نگاه به پروفایل من بندازی میفهمی که منم تا 3 روز پیش VB.NET کار می کردم این دستور توی سی شارپ نیست مگه اینه که از کلاس ویژوال بیسیک استفاده کنید پس نتیجه این شد که استفاده از دستور SubString به صرفه تره!!!:قهقهه:

میلاد قاضی پور
پنج شنبه 18 شهریور 1389, 19:56 عصر
شما اگر رشته رو به عدد کانورت کنید سی شارپ خودش اینکار رو براتون میکنه . اما اعداد بعدی رو نادیده میگیره .

Salar Ashgi
پنج شنبه 18 شهریور 1389, 20:10 عصر
زیاد راجب مساله توضیح نداده اید ، ولی با این اوصافی که ذکر کردید ، متودی واسه اینکار :



string F(string str)
{
string res = "";
foreach (char c in str)
{
if (char.IsDigit(c))
{
int i = str.IndexOf(c);
for (int j = i; char.IsDigit(str[j]); j++)
res += (str[j].ToString());
break;
}

}
return res;
}
نحوه استفاده :


MessageBox.Show(F("asd235h9j"));

میلاد قاضی پور
پنج شنبه 18 شهریور 1389, 20:26 عصر
من واقعا سر در گم شدم . مطمئن هستم یک روش بسیار ساده توی کتاب مرجع کاملم خونده بودم که بدون نیاز به هیچ عملیات خاصی عدد از درون رشته در میومد منتها عیبش این بود که فقط اولین عدد یافت شده برگردونده میشد . حالا هرچقدر میگردم نمیتونم پیداش کنم . نمیدونم تابع خاصی بود یا روش دیگه ای. فقط اینو میدونم که یک خط کد داشت . عجیبه که نمیتونم پیداش کنم .

Salar Ashgi
پنج شنبه 18 شهریور 1389, 20:30 عصر
من واقعا سر در گم شدم . مطمئن هستم یک روش بسیار ساده توی کتاب مرجع کاملم خونده بودم که بدون نیاز به هیچ عملیات خاصی عدد از درون رشته در میومد منتها عیبش این بود که فقط اولین عدد یافت شده برگردونده میشد . حالا هرچقدر میگردم نمیتونم پیداش کنم . نمیدونم تابع خاصی بود یا روش دیگه ای. فقط اینو میدونم که یک خط کد داشت . عجیبه که نمیتونم پیداش کنم .



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

موفق باشید ./

Salar Ashgi
پنج شنبه 18 شهریور 1389, 20:37 عصر
شما اگر رشته رو به عدد کانورت کنید سی شارپ خودش اینکار رو براتون میکنه . اما اعداد بعدی رو نادیده میگیره .

جان ؟؟؟!!!
لطفا در مورد پستی که ارسال میکنید ، قبلش یه تستی توی Visual Studio انجام بدید و بعد !
رشته باید قابل تبدیل به عدد باشه ، در غیر اینصورت پیغام خطا دریافت خواهید کرد !

میلاد قاضی پور
پنج شنبه 18 شهریور 1389, 21:25 عصر
جان ؟؟؟!!!
لطفا در مورد پستی که ارسال میکنید ، قبلش یه تستی توی Visual Studio انجام بدید و بعد !
رشته باید قابل تبدیل به عدد باشه ، در غیر اینصورت پیغام خطا دریافت خواهید کرد !
عزیزم توضیحاتش تو پست بعدش نوشتم . اونو که نوشتم قصد داشتم روششو سریعا با کد زیرش درج کنم که نتونستم کد مورد نظر رو پیدا کنم .:)


جان ؟؟؟!!!
:بامزه:

#aliyari_C
پنج شنبه 18 شهریور 1389, 23:24 عصر
ُسلام
فرض را بر این گذاشتیم که مقدار متغیر شما ,مقادیری پویا است.


MessageBox.Show(strtest("9ali123h345asd44gghg1h").ToString());

//output
//123
//1




public StringBuilder strtest(string str)
{
StringBuilder sb = new StringBuilder();
string[] strf = str.Split(new char[] { 'h' });
foreach (string item in strf)
{

for (int i = item.Length; i > 0; i--)
{

if (!char.IsNumber(item.ElementAt(i - 1)))
{

if (item.Substring(i).Length != 0)
sb.AppendLine(item.Substring(i));
break;
}
}


}

return sb;

}

موفق وتندرست باشی
__________________________________________________ __________________________________________________ _____
سکوت سرشار از نا گفته هاست...........

syntiberium
پنج شنبه 18 شهریور 1389, 23:25 عصر
به نظر من درست نیست که عدد 9 در رشته ی asd235h9j به 235 بچسبد چون 9 یه عدد جدا هست و به روش زیر باید عمل کرد :



string F(string str)
{
string res = "";
foreach (char c in str)
{
int spc;
if (char.IsDigit(c))
{
spc=1;
int i = str.IndexOf(c);
for (int j = i; char.IsDigit(str[j]); j++)
res += (str[j].ToString());
break;
}
else
{
if(spc==1)
{
res += " ";
spc=0;
}
}

}
return res;
}

توضیحات : این کدی که من به کد جناب Salar Ashgi اضافه کردم باعث می شه بین اعدادی که از هم جدا هستند یک فاصله بگذارد و بعد با استفاده از تابع split می توان هر عدد را جدا گانه داخل یک خانه از آرایه گذاشت .

Salar Ashgi
جمعه 19 شهریور 1389, 00:02 صبح
توضیحات : این کدی که من به کد جناب Salar Ashgi اضافه کردم باعث می شه بین اعدادی که از هم جدا هستند یک فاصله بگذارد و بعد با استفاده از تابع split می توان هر عدد را جدا گانه داخل یک خانه از آرایه گذاشت .


فک نکنم نیازی به اینکار بوده باشه ؟! چون این دوست عزیزمون فقط خروجی مربوطه رو میخواستند !

Mohandes2009
جمعه 19 شهریور 1389, 12:38 عصر
زیاد راجب مساله توضیح نداده اید ، ولی با این اوصافی که ذکر کردید ، متودی واسه اینکار :



string F(string str)
{
string res = "";
foreach (char c in str)
{
if (char.IsDigit(c))
{
int i = str.IndexOf(c);
for (int j = i; char.IsDigit(str[j]); j++)
res += (str[j].ToString());
break;
}

}
return res;
}
نحوه استفاده :


MessageBox.Show(F("asd235h9j"));


این کد خیلی عالیه مدیر جان ولی فقط عدد اول را پیدا میکنه که !!
بعدی ها و عدد های بعد رشته را نه مثلا در رشته sd23sdddf34ds3
عدد 2 را بر میگردونه ولی بقیه را نه!:متفکر:

Salar Ashgi
جمعه 19 شهریور 1389, 12:52 عصر
ولی فقط عدد اول را پیدا میکنه که !!
بعدی ها و عدد های بعد رشته را نه مثلا در رشته sd23sdddf34ds3
عدد 2 را بر میگردونه ولی بقیه را نه!

این چیزی بود که دوستمون خواسته بودن ؛ در ضمن در مورد رشته شما
هم خروجی این کد میشه 23 ، دوستمون هم گفته بودند وقتی به اولین عدد رسید
تا رسیدن به کاراکتر غیر عددی ، اعداد از رشته گرفته شوند ./

group45
جمعه 19 شهریور 1389, 15:02 عصر
بفرمایید اینم یه کد کاملا حرفه ای...(دروغ گفتم)



string st1 = richTextBox1.Text;
richTextBox1.Text += "\n";
int i;
bool allow = false;
for (i = 0; i < st1.Length; i++)
{
try
{
int in1 = int.Parse(st1[i].ToString());
richTextBox1.Text += in1.ToString();
allow = true;
}
catch
{
if(allow)
richTextBox1.Text += '\n';
allow = false;
}
}


برید حالشو ببرید :لبخند:
--------------------
راستی یادم رفت بگم که اول رشتتو تو richTextBox1 بریز و این کدا رو تو رویداد یه کلید بزار

s_mokhtari
جمعه 19 شهریور 1389, 21:14 عصر
دوست عزیز شما اگه یک نگاه به پروفایل من بندازی میفهمی که منم تا 3 روز پیش VB.NET کار می کردم این دستور توی سی شارپ نیست مگه اینه که از کلاس ویژوال بیسیک استفاده کنید پس نتیجه این شد که استفاده از دستور SubString به صرفه تره!!!:قهقهه:
سلام
دوست عزيز ميشه بگيد اين متغير از چه نوعي بايد باشه
Information
ممنون:تشویق::تشویق:
--------------------
سلام
از همه دوستان بابت راهنمايي ممنون
از مدير سايت هم بسيار بسيار متشكرم
:تشویق::تشویق::تشویق::تشویق:: شویق::تشویق::تشویق::تشویق::ت ویق::تشویق::تشویق::تشویق:

#aliyari_C
جمعه 19 شهریور 1389, 23:41 عصر
این کد خیلی عالیه مدیر جان ولی فقط عدد اول را پیدا میکنه که !!

کد منرو یه نگاه بنداز , امتحانش ضرری نداره:کف:

mmd2009
جمعه 19 شهریور 1389, 23:58 عصر
زیاد راجب مساله توضیح نداده اید ، ولی با این اوصافی که ذکر کردید ، متودی واسه اینکار :



string F(string str)
{
string res = "";
foreach (char c in str)
{
if (char.IsDigit(c))
{
int i = str.IndexOf(c);
for (int j = i; char.IsDigit(str[j]); j++)
res += (str[j].ToString());
break;
}

}
return res;
}
نحوه استفاده :


MessageBox.Show(F("asd235h9j"));



این کد خوبه منم ترمیمش کردم که بهتر بشه



string F(string str)
{
string res = "";
foreach (char c in str)
{
if (char.IsDigit(c))
{
res += c;
}
else if (res != "")
break;
}
return res;
}

s_mokhtari
شنبه 20 شهریور 1389, 10:08 صبح
سلام
دوستان باز ممنون از كدهاي خوبتون
حالا اگه بخواهيم تعداد تكرار يه رشته توي يه رشته ديگه رو بدست بيارم با اين دستورات خوب شما چطور اين كار امكان پذير خودم نوشتم ولي طولاني
dealijjjaliehyali
الان رشته ali سه بار تكرار شده
ممنون:چشمک::چشمک:

mmd2009
شنبه 20 شهریور 1389, 11:21 صبح
دوست عزیز با توجه به قوانین سایت باید سوالت رو تو یک تاپیک دیگه بپرسی :چشمک:

#aliyari_C
یک شنبه 21 شهریور 1389, 22:02 عصر
(یه چیزو رفاقتانه بهت می گم اینکه , هیچ وقت سعی نکن تا جواب اون سوال بدون اینکه خودت روش کار کرده نباشی بپرسی . شاید هلو بپر تو گلو الان خوب باشه ولی وقتی بخوای کدهای زیادی بنویسی چطور )


int result=0;
string search = "ali";
string s = "alialimohammedalirezaaljavadaliiFFHaliali";
string temp = Regex.Replace(s, search, "");
if(s.Length>temp.Length)
result = (s.Length - temp.Length) / search.Length;

MessageBox.Show(result.ToString());



موفق باشی

s_mokhtari
دوشنبه 22 شهریور 1389, 11:13 صبح
(یه چیزو رفاقتانه بهت می گم اینکه , هیچ وقت سعی نکن تا جواب اون سوال بدون اینکه خودت روش کار کرده نباشی بپرسی . شاید هلو بپر تو گلو الان خوب باشه ولی وقتی بخوای کدهای زیادی بنویسی چطور )


int result=0;
string search = "ali";
string s = "alialimohammedalirezaaljavadaliiFFHaliali";
string temp = Regex.Replace(s, search, "");
if(s.Length>temp.Length)
result = (s.Length - temp.Length) / search.Length;

MessageBox.Show(result.ToString());


موفق باشی
سلام
دوست عزيز كارت حرف نداشت كدي كه خودم نوشته بودم يه كم طولاني بود ولي از شما بهتر بود
ممنون:تشویق::تشویق::تشویق::ت ویق::تشویق::تشویق:
ولي يه سوال ميشه اين دستور رو توضيح بديد

Regex.Replace(s, search, "");

oliya24
چهارشنبه 31 شهریور 1389, 00:34 صبح
سلام خسته نباشید من میخواستم بدونم که چهطور میشه عمل درج و ویرایش وحذف رو در دیتاگرید انجام بدم
اگه میشه یه پروژه برام بگذارین ممنون میشم

mmd2009
چهارشنبه 31 شهریور 1389, 01:28 صبح
سلام خسته نباشید من میخواستم بدونم که چهطور میشه عمل درج و ویرایش وحذف رو در دیتاگرید انجام بدم
اگه میشه یه پروژه برام بگذارین ممنون میشم

با سلام

این سوال رو تو یک تاپیک مطرح کنید یا جستجو کنید تو سایت نمونه هاش زیاده

Mohandes2009
چهارشنبه 31 شهریور 1389, 12:44 عصر
سلام خسته نباشید من میخواستم بدونم که چهطور میشه عمل درج و ویرایش وحذف رو در دیتاگرید انجام بدم
اگه میشه یه پروژه برام بگذارین ممنون میشم
چه ربطی به اینجا داره ؟!!!:قهقهه: