PDA

View Full Version : مبتدی: حذف کاراکترهای تکراری



mohammad1314
پنج شنبه 13 فروردین 1394, 07:22 صبح
با سلام خدمت دوستان.

برنامه ای میخوام که یه رشته از کاربر بگیره و فضاهای خالی اون رو با * جایگزین کنه. این کار با تابع Replace به راحتی انجام میشه ، اما خواستم بدونم ، بدون استفاده از تابع ، چطور باید برنامش رو بنویسیم.

و یه سوال دیگه.
میخوام برنامه ای بنویسم که یک رشته از کاربر بگیره و کاراکترهای تکراری اون رو حذف کنه. میخوام تو این برنامه ، از توابع رشته ای اصلا استفاده نکنم و یا اگر هم استفاده کنم ، خیلی خیلی کم باشه.

دوستان اگه راهنمایی بکنین ، ممنون میشم.
در ضمن ممنون میشم اگه در حد مبتدی پاسخ بدین.
با تشکر

علیرضا.ا
جمعه 14 فروردین 1394, 01:36 صبح
سلام
واسه سوال اول فکر کنم این الگوریتم جواب بده. متاسفانه الان وی بی ندارم تست کنم:

یه رشته ی خالی میسازی.
یه حلقه میزنی واسه تک تک کاراکتر های متنی که داری:
اگه کارکتر مساوی space بود به رشته یه ستاره اضافه میکنی
اگه نبود خود اون کارکتر رو به رشته اضافه میکنی.

واسه سوال دوم- برای متن انگلیسی احتمالا جواب میده . متن فارسی رو نمیدونم:

یه ارایه عددی میسازی.
یه حلقه میزنی واسه تک تک کارکتر های متن:
معادل کد اسکی هر کارکتر رو میریزی تو ارایه

یه حلقه دیگه میزنی واسه تک تک ایتم های ارایه:
اگه تعداد ایتم هایی که برابر اون عدد هست از یک بیشتره اونا رو حذف میکنی

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

اخر سر هم رشته رو چاپ میکنی



شرمنده. خیلی وقته وی بی کار نکردم.وی بی ندارم رو سیستم کد اصلیشو بهت بدم:)

mohammad1314
جمعه 14 فروردین 1394, 11:18 صبح
ممنون از آقای علیرضا . ولی اگه کسی از دوستان کد vb همین سوالارو رو هم داشته باشه ، ممنون میشم. خیلی ضروریه.

علیرضا.ا
جمعه 14 فروردین 1394, 23:45 عصر
وی بی دستم رسید.
سوال اول:


Dim RESULT As String = ""
Dim STR As String = " Ali reza "
For Each ch As Char In STR
If ch = " " Then
RESULT += "*"
Else
RESULT += ch
End If
Next
MsgBox(RESULT)





سوال دوم رو الان وقت ندارم بنویسم. تا فرداشب بهت میرسونم

علیرضا.ا
شنبه 15 فروردین 1394, 23:11 عصر
واسه سوال دوم از منوی projecy گزینه add module رو بزن و این کد رو بزار توی اون:


<System.Runtime.CompilerServices.Extension()> _
Public Sub RemoveAt(Of T)(ByRef arr As T(), ByVal index As Integer)
Dim uBound = arr.GetUpperBound(0)
Dim lBound = arr.GetLowerBound(0)
Dim arrLen = uBound - lBound


If index < lBound OrElse index > uBound Then
Throw New ArgumentOutOfRangeException( _
String.Format("Index must be from {0} to {1}.", lBound, uBound))


Else
'create an array 1 element less than the input array
Dim outArr(arrLen - 1) As T
'copy the first part of the input array
Array.Copy(arr, 0, outArr, 0, index)
'then copy the second part of the input array
Array.Copy(arr, index + 1, outArr, index, uBound - index)


arr = outArr
End If
End Sub


حالا توی رویداد مورد نظرت این کد رو بزار:




Dim RESULT As String = ""
Dim STR As String = " aalli rezar "
Dim list(STR.Length) As Byte
Dim i As Integer = 0
For Each ch As Char In STR
list(i) = Asc(ch)
i += 1
Next
Dim k, j As Integer
j = 0
While j < list.Length
k = j + 1
While k < list.Length
If list(j) = list(k) Then
list.RemoveAt(k)
End If
k += 1
End While
j += 1
End While


For Each num As Byte In list
RESULT += Chr(num)
Next
MsgBox(RESULT)



جاییشو نفهمیدی بگو توضیح بدم