الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث في نص

مغلق
بدأه Ayoub JAMAL EL IDRISSI في 12 سبتمبر 2006 · 11 رد · 1,329 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
اقتباس
بسم الله الرحمن الرحيم

نريد ان نحسب عدد تكرار الكلمة "lol" في نص معين فمثلا النص التالي :

lol lol

يرجع لنا 6 كون لدينا كلمتان lol مكونتان من 6 أحرف، لكن لنفرض ان لدينا الكلمة :

lolol

ففي هذه الحالة يجب ان يرجع لنا الكود 5 فقط كون الحرف الأوسط "l" مشترك و نفس الأمر مع الكلمة :

lolololol lol lolo

سترجع لنا 15

المطلوب كتابة Function يكون ال prototype الخاص بها كالتالي :

Public Function CountOccurence(message as string) As Integer

لتجربة اكوادكم جربوا الجمل التالية و قارنوا بين النتائج :

how are youthats funny lol

returns : 3

how are youthats funny lollol

returns : 6

lol how are youthats funny lolol

returns : 8

lolololololoolololoololllolol

returns : 24

أظن ان الأمر بسيط، في انتظار الحل :)

http://ayoub.awardspace.com/Mag/index.php?...%C8%E4%CC%C7%CD

تم تعديل هذه المشاركة بواسطة crazy-man في 12 سبتمبر 2006 في 18:04

#2

السلام عليكم

أخي لقد عملت دالة تقوم بذلك و لكني لست متأكدا من أن هذا هو الجواب الصحيح لأنك لم تضع أي مثال يعطي عدد مرات تكرار كلمة lol

المهم الدالة هي كالآتي :

Module CountOccurenceModule

	Dim I As Integer
	Dim St As Integer = 0

	Public Function CountOccurence(ByVal message As String) As Integer

		Dim Txt1, Txt2 As String

		Txt1 = 0

		Try
			For St = 0 To message.Length

				Txt2 = message.Chars(St) & message.Chars(St + 1) & message.Chars(St + 2)

				If Txt2 = "lol" Then

					Txt1 = Val(Txt1) + 1

				End If

				Txt2 = ""

			Next

		Catch ex As Exception
		End Try

		CountOccurence = Txt1

		Return CountOccurence

	End Function

End Module

و مثال لذلك الكود التالي الذي يعطي عدد 6 لتكرار كلمة lol ست مرات

	 MsgBox(CountOccurence("lolololol lol lolo"))

أرجو أن يكون جوابي صحيحا و إن لم يكن صحيحا فأرجو منك الإيضاح أكثر

#3

انا لم أجرب كودك لكن على حسب ماذكرت فانه اعطاك 6 للجملة "lolololol lol lolo" و هذا خطأ لأني قلت اني اريد عدد الحروف و الصحيح ان يرجع لك 15

#4

السلام عليكم،،

جرب هذه الاجرائية اخى ايوب،،LOL

 Public Function CountOccurence(ByVal message As String) As Int32
		Dim tempArray() As Char = message.ToCharArray
		Dim last = 1, ret As Int32
		For i As Int32 = 1 To tempArray.Length - 2
			If (tempArray(i - 1) + tempArray(i) + tempArray(i + 1)) = "lol" Then : ret += 3
				If last = i - 1 Then ret -= 1 : last = i + 1
			End If
		Next
		CountOccurence = ret
	End Function

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#5

جرب الكلمة

lolol

سوف يرجع لك 6 و هذا خطأ كون و كما قلت في سؤالي الحرف الأوسط مشترك بين lol الأولى و lol الثانية لذا لا يجب احتسابه مرتين لذا يجب ان يرجع فقط 5 و ليس ستة

#6
crazy-man كتب:
جرب الكلمة

lolol

سوف يرجع لك 6 و هذا خطأ كون و كما قلت في سؤالي الحرف الأوسط مشترك بين lol الأولى و lol الثانية لذا لا يجب احتسابه مرتين لذا يجب ان يرجع فقط 5 و ليس ستة

قمت بتجربتها وهى ترجع 5 اى ان الاجراء سليم،،ارجو منك اعادة التجربة

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

تفضل هذه محاولة للحل

	Public Function CountOccurence(ByVal message As String) As Integer
		Dim SerPos As Integer = 0, PrvSerPos As Integer = 0, Tmc As Integer = 0
		SerPos = message.IndexOf("lol")
		If SerPos <> -1 Then Tmc += 3
		While SerPos <> -1
			PrvSerPos = SerPos
			SerPos = message.IndexOf("lol", SerPos + 1)
			If SerPos = -1 Then
				Return Tmc
			End If
			If SerPos - PrvSerPos = 2 Then
				Tmc += 2
			Else
				Tmc += 3
			End If
		End While
		Return Tmc
	End Function

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#8

VB

 
Function CountOccurence(ByVal message As String) As Integer
	Dim m As String = message + "***"
	Dim ch As Char() = m.ToCharArray
	Dim count As Integer = 0
	for i as  Integer = 0 to ch.Length - 3
		If ch(i) + ch(i + 1) + ch(i + 2) = "lol" Then
			count += IIf(ch(i + 2) + ch(i + 3) + ch(i + 4) = "lol",  2, 3)
		End If
	next
	Return count
End Function

#C

 
int CountOccurence(string message )
{
	string m = message  + "***";
	char[] ch = m.ToCharArray();
	int count = 0;
	for(int i = 0; i < ch.Length - 2; i++) {
		if(ch.ToString() + ch[i + 1].ToString() + ch[i + 2].ToString() == "lol") {
			count += ((ch[i + 2].ToString() + ch[i + 3].ToString() + ch[i + 4].ToString() == "lol") ? 2 : 3);
		}
	}
	return count;
}

تم تعديل هذه المشاركة بواسطة Moudey في 13 سبتمبر 2006 في 01:07

مواضيع متنوعة

#9

بالنسبة لك اخي solo فقد أعدت الاجراء و أعطاني 6

اما الإخوة samerselo و Moudey فالأكواد تعطي النتائج المنتظرة منها

الآن أتمنى من الإخوة لو وضع أكوادهم في موقعي (طلبا لا أمرا) حتى تعم الفائدة و هذا هو الرابط

http://ayoub.awardspace.com/Mag/index.php?...3&Itemid=71

و الآن أظن انكم بداتم في تسخين عضلات الدماغ و انتظروا ما هو أصعب :D رغم اني متأكد أنكم ستحلونهم بسرعة :)

#10

هذا هو الكود الذي كتبت كحل للمسألة :

 Public Function Count(ByVal txt As String) As Integer
		Dim CountIs As Integer = 0
		Dim Ignore As Boolean = False
		For i As Int16 = 0 To txt.Length - 1
			If Ignore = False Then
				If i - 2 >= 0 AndAlso txt.Substring(i - 2, 1) = "l" AndAlso txt.Substring(i - 1, 1) = "o" AndAlso txt.Substring(i, 1) = "l" Then
					CountIs += 1
					Ignore = True
				End If
			End If
			If Ignore = False Then
				If i - 1 >= 0 AndAlso i + 1 < txt.Length AndAlso txt.Substring(i - 1, 1) = "l" AndAlso txt.Substring(i, 1) = "o" AndAlso txt.Substring(i + 1, 1) = "l" Then
					CountIs += 1 : Ignore = True
				End If
			End If
			If Ignore = False Then
				If i + 2 < txt.Length AndAlso txt.Substring(i, 1) = "l" AndAlso txt.Substring(i + 1, 1) = "o" AndAlso txt.Substring(i + 2, 1) = "l" Then
					CountIs += 1 : Ignore = True
				End If
			End If
			Ignore = False
		Next
		Return CountIs
	End Function
#11

السلام عليكم

قرأت هذا التحدي منذ يومين ولكن لظرف ما وجدت نفسي في بيئة بريه لا تحتوي إلا على بيت (خيمة للبدو) استخدم فيها "الفتيلة"وهي وسيلة تستخدم بدل الكهرباء للإنارة و وراعي مع أغنامه فقط وافتقرت لكل الوسائل معادا قلم و بعض الورقات أحضرتها خصيصا لحل هذه التحدي الرائع .

أخي العزيز golden man

قد اضطررت أن اقتبس منك كود فارجوا منك تسامحني .

هذا الحل ارجوا الرد ان لم اوفق

Public Function CountOccurence(ByVal message As String) As Integer
		Dim St, Txt1 As Integer
		Dim Txt2, Txt3 As String
		Dim count As Boolean = False
		Txt1 = 0
		St = 0
		Try
Do While St <= message.Length

Txt2 = message.Chars(St) & message.Chars(St + 1) & message.Chars(St + 2)

				count = False

  If Txt2 = "lol" And Txt3 = "l" Then

					Txt1 += 2 'عدد الحروف

					St += 2

					Txt3 = Mid(Txt2, 3, 1)

					count = True

				ElseIf Txt2 = "lol" Then

					Txt1 += 3  'عدد الحروف

					St += 2

					Txt3 = Mid(Txt2, 3, 1)

					count = True

				End If

   If Mid(Txt2, 1, 2) = "ol" And Txt3 = "l" Then

					Txt1 += 2  'عدد الحروف

					St += 2

					Txt3 = Mid(Txt2, 2, 1)

					count = True

				End If

   If count = False Then St += 1 : Txt3 = Nothing

				Txt2 = Nothing

			Loop
		Catch ex As Exception
		End Try

		CountOccurence = Txt1

	End Function

"نحن لا نستسلم... ننتصر أو نموت.... وهذه ليست النهاية... بل سيكون عليكم أن تحاربوا الجيل القادم والاجيال التي تليه... اما أنا... فإن عمري سيكون أطول من عمر شانقي."

عمر المختار

اللهم انعم على بلادي بالأمن والأمان

#12

اعتقد ان هذا الحل ايضا يعطي النتيجة المطلوبة

 Public Function CountOccurence(ByVal s As String) As Integer
		Dim i, j, count As Integer
		Dim temp As Char = "0"
		Dim c() As Char = s.ToCharArray
		For i = 0 To c.Length - 3
			If c(i) + c(i + 1) + c(i + 2) = "lol" Then
				If c(i) = temp And i = j Then
					count = count + 2
				Else
					count = count + 3
				End If
				temp = c(i + 2)
				j = i + 2
			End If

		Next
		Return (count)
	End Function

It is my time to be creative

هذا الموضوع مغلق.

مواضيع مشابهة