PDA

View Full Version : جابجایی رشته



code_project
سه شنبه 05 آبان 1394, 22:15 عصر
سلام دوستان. من دنبال یه تابع میگردم که رشته 12%45*78541@789$56 را تبدیل کنه به 56$789@78541*45%12 . ممنون میشم کمکم کنید. خیلی هنگ کردم

winner1
سه شنبه 05 آبان 1394, 22:20 عصر
تابع reverse کلاس string استفاده کن

string str="12%45*78541@789$56";
str=str.Revers();

code_project
چهارشنبه 06 آبان 1394, 22:29 عصر
دوست گلم ممنون اما من نمیخوام رشته م برعکس بشه. میخوام رشته از محل کاراکترهای خاص تفکیک بشه و بعد از آخر به اول چیده بشه. خیلی تلاش کردم اما نشد. ممنون میشم اساتید وقت بذارن

winner1
پنج شنبه 07 آبان 1394, 09:42 صبح
خوب اینم با یه حلقه کاملا راحته منتها شما بگین مبنای جدا سازی چی باید باشه؟

xman_dj
پنج شنبه 07 آبان 1394, 10:20 صبح
string mystr = "12%45*78541@789$56";
string str = "%*@$";

foreach (char c in str)
{
int i = 0;
while ((i = mystr.IndexOf(c, i)) != -1)
{
// Print out the substring.
textBox1.Text += (mystr.Substring(i))+"-";
textBox2.Text += mystr.IndexOf(mystr.Substring(i), i) + "-";
// Increment the index.
i++;
}
}


محل رشته های غیر مجاز معلوم میشه تو text2 حالا میتونی رشته ها رو برداری و برعکسش کنی

code_project
پنج شنبه 07 آبان 1394, 11:11 صبح
جداسازی مبنای خاصی نداره دوستم. ممنون که کد نوشتین اما من خنگ بازم نتونستم با وجود مشخص کردن اندیس کاراکترهای خاصُ به خروجی مناسب برسم. ممنون میشم کد کامل بذارید

xman_dj
پنج شنبه 07 آبان 1394, 11:30 صبح
دوست من ببین اندیس هارو میدونی الان درسته؟
مثلا فرض کنیم اندیس اولین کاراکتر غیر مجاز تو 4 هست.
حالا تو میتونی به صورت زیر به رشته وسط این کاراکتر غیرمجاز دست یابی.
اگر اسم رشته اصلی mystr باشه


mystr.Substring(0, 4);

که صفر نقطه شروع و 4 تعداد کاراکتری که میخوای خوانده شه.
الان میخوای رشته سوم رو بخونی یعنی میشه اندیس کاراکتر غیر مجاز سوم ،نقطه شروع و نقطه پایان ،(اندیس کاراکتر غیر مجاز چهارم - اندیس کاراکتر غیر مجاز سوم(که میشه طول رشته)).
الان رشته هارو داری هر کاری میخوای باهاش بکن .مثلا برعکسش کن .که سرچ کنی معکوس کردن رشته میاره واست
موفق باشی

محمد آشتیانی
پنج شنبه 07 آبان 1394, 13:25 عصر
سلام
به این صورت ، یک بار اعداد رو در یک آرایه ذخیره میکنی و یک بار جدا کننده ها رو ، بعد آرایه ها رو Reverse میکنی و نهایتا نتیجه رو در یک رشته قرار میدی (مثل متدی که نوشتم)

public String ReverseString(string input)
{
string output = string.Empty;

string[] numbers = Regex.Split(input, @"\D+");
string[] seprators = Regex.Split(input, @"\d+");

seprators = seprators.Where(x => !string.IsNullOrEmpty(x)).ToArray();

Array.Reverse(numbers);
Array.Reverse(seprators);

for (int i = 0; i < numbers.Count(); i++)
{
output += (i < seprators.Length) ? numbers[i] + seprators[i] : numbers[i];
}

return output;
}


موفق باشید.

code_project
جمعه 08 آبان 1394, 10:25 صبح
سلام جناب آشتیانی و سایر دوستان. ممنون بابت جواب ها
جناب آشتیانی رشته من الزاما عددی نیست و ممکنه کلمات فارسی و انگلیسی و یا ترکیبی از اونا باشه که با یه الگوی نامرتب کنار هم نشستن و جای کاراکترهای خاص هم اصلا مشخص نیست. توراخدا کمک

محمد آشتیانی
جمعه 08 آبان 1394, 11:15 صبح
سلام
چرا هیچی مشخص نیست پس؟ بالاخره یه قاعده‌ای باید داشته باشه ، کاراکترهای جداکننده مشخص هستن آیا؟ یعنی چه کاراکتر هایی بعنوان جداکننده عبارت ها استفاده میشوند

winner1
جمعه 08 آبان 1394, 11:54 صبح
سلامچرا هیچی مشخص نیست پس؟ بالاخره یه قاعده‌ای باید داشته باشه ، کاراکترهای جداکننده مشخص هستن آیا؟ یعنی چه کاراکتر هایی بعنوان جداکننده عبارت ها استفاده میشوند
همین دیگه منم پرسیدم میگن مبنا نداره ایشون هنوز سوالشون مشخص نیس ظاهرن البته مشخصه ظاهرن نمیتونن سوال و تحلیل کنن

code_project
جمعه 08 آبان 1394, 12:34 عصر
کاراکترهای جداکننده هر کاراکتر خاصی میتونه باشه. طول رشته ها مشخص نیست و عبارت های بین کاراکترها هم مشخص نیست. راستش من دارم روی فیلد شرح کالا توی همکاران سیستم یه سرچ خاص مینویسم. کاربر کاراکترهای خاص وارد کرده و بعضی عبارت هابرعکس شده. حالا من میخوام همه اونها را به حالت درستشون تبدیل کنم

code_project
جمعه 08 آبان 1394, 12:38 عصر
کاراکترهای جداکننده همه کاراکترهای خاص مثه !@#$%^&*()_- میتونه باشه

winner1
جمعه 08 آبان 1394, 13:00 عصر
کاراکترهای جداکننده همه کاراکترهای خاص مثه !@#$%^&*()_- میتونه باشه
خوب اینارو بریز تو یه لیست بعدشم فکر نکنم دیگه متد Split کلاس رشته جواب بده ولی الان از یه حلقه استفاده کن هر وقت کارکاتر تو لیست کاراکتر های خاص بود از اخرین جستحو تا جدید رو بردار

محمد آشتیانی
جمعه 08 آبان 1394, 13:44 عصر
سلام
متد بالا رو به اینصورت تغییر بدید

public String ReverseString(string input)
{
string output = string.Empty;

string[] expressions = Regex.Split(input, @"[!@#$%^&*()\-_]");
string[] seprators = Regex.Split(input, @"[^\.!@#$%^&*()\-_\s]");

seprators = seprators.Where(x => !string.IsNullOrEmpty(x)).ToArray();

Array.Reverse(expressions);
Array.Reverse(seprators);

for (int i = 0; i < expressions.Count(); i++)
{
output += (i < seprators.Length) ? expressions[i] + seprators[i] : expressions[i];
}

return output;
}


استفادش هم به اینصورت میشه ، فرض کن رشته ورودی در textbox1 هست و خروجی رو در textbox2 نمایش میدی
textBox2.Text = ReverseString(textBox1.Text);


موفق باشید.

code_project
جمعه 08 آبان 1394, 15:13 عصر
عالی بود آقای آشتیانی . ممنوووووووووووووووووووووو ووووووووووووووووووووون