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

كيف يمكن البحث عن نص في سلسلة نصية

مغلق
بدأه Shamel في 1 نوفمبر 2007 · 6 رد · 724 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كيف يمكن البحث عن نص في سلسلة نصية ؟ ماهي دالات البحث عن نص في سلسلة نصية ؟ وكيف يمكن عمل ذلك

جزاكم الله خيراً

#2

السلام عليكم و رحمة الله

طبعا يمكنك ان تعمل البحث مباشرة. مثال لذلك لنفرض انك تبحث عن كلمة "محمد" فى ال سلسلة "كم عندك محمد, عندى سى++"

يمكنك ان تعمل مقارنة من اول النص المراد البحث فيه يعن تعمل الاتى

تقارن اول حرف فى "محمد" م باول حرف فى السلسلة "ك". لم يحدث تطابق

تقارن اول حرف فى "محمد" م بثانى حرف فى السلسلة "م". يحدث تطابق

تقارن ثانى حرف فى "محمد" ح بثالث حرف فى السلسلة " ". لم يحدث تطابق لان نرجع الى البداية

تقارن اول حرف فى "محمد" م بثالث حرف فى السلسلة " ". لم يحدث تطابق

تقارن اول حرف فى "محمد" م برابع حرف فى السلسلة "ع". لم يحدث تطابق

تقارن اول حرف فى "محمد" م بخامس حرف فى السلسلة "ن". لم يحدث تطابق

تقارن اول حرف فى "محمد" م بسادس حرف فى السلسلة "د". لم يحدث تطابق

تقارن اول حرف فى "محمد" م بسابع حرف فى السلسلة "ك". لم يحدث تطابق

تقارن اول حرف فى "محمد" م بثامن حرف فى السلسلة " ". لم يحدث تطابق

تقارن اول حرف فى "محمد" م بتاسع حرف فى السلسلة "م". يحدث تطابق

تقارن ثانى حرف فى "محمد" ح ب 10 حرف فى السلسلة "ح". يحدث تطابق

تقارن ثالث حرف فى "محمد" م ب 11 حرف فى السلسلة "م". يحدث تطابق

تقارن رابع حرف فى "محمد" د ب 12 حرف فى السلسلة "د". يحدث تطابق, الان نعلن اننا وجدناها عند بعد 9

لكن هذه طريقة عقيمة و تستهلك الكثير من الوقت و الحسابات

اكيد هناك طرق اخرى متقدمة

مثال

http://en.wikipedia.org/wiki/Boyer–Moore–Horspool_algorithm

#3

طيب لو أردت البحث عن عبارة بين كلمتين ؟؟

مثلا في بسم الله الرحمن الرحيم

اريد البحث عن أي عبارة بين بسم والرحيم

وراح يطلع لي الله الرحمن

كيف ؟؟

#4

لا اظن ان هذه مشكلة كبيرة

على سبيل المثال يتبادر الى ذهنى حل بسيط ربما ليس افضل حل لكنه بسيط

نفس المثال "بسم الله الرحمن الرحيم"

فى البداية, ابحث عن بسم و سجل انها تقع على ازاحة 0 و طول بسم 3

الان ابحث عن الرحيم وسجل انها تقع على ازاحة 15

الان النص يوجد عند الازاحة 0+3 = 3

و طوله 15 - 3 = 12

هذه طريقة

لكن نصيحة, اذا اردت ان تتعامل مع regular expressions بصورة كثيرة

انصحك بالزهاب اما الى perl او python

#5

هل يمكن توضيح فكرتك بكتابة كود مبسط لها

#6

ok let us assume that you have already developed a function that can find a substring in a string

let us call this functtion int find(char* substring , char* string)

for example if we used the function find using

find("am" , "I am Mohammed") in this case the function will return 2 because the substring 2 lies at offset 2

now lets us develop the other function get_enclosed_stirng

the signature of this function has to be char* get_enclosed_string(char* start , char* end , char* string)

the function takes the header of the srtring and the footer and the string to perform the search on

and return the string that was found betweer the header and the footer

throug the definition of this function i will use the previously defined one "find" so i assume that it exists


{
int offset_start = find(start , string);
int offset_end = find(end);
int length_start = strlen(start);

char* ret = (char*)(offset_start + length_start);
int ret_length = (int)(offset_end - ret);

/*
now copy the desired string in a new buffer
and return the newly created buffer
*/

char* buffer = malloc(ret_length+1);
memcpy(buffer , ret , ret_length);
buffer[ret_length] = 0;

return buffer;

}
char* get_enclosed_string(char* start , char* end , char* string)

I did not test this code for both syntactical errors and logical errors

but i expect it to work by very few modifications

sorry for writing in english, this box does not support arabic :)

#7

تسجيل حضور فقط وساعود لاحقا مع الشكر سلفا وشكر مؤخر :)

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

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