التكرار عبر المحارف (strsplit)
جزء من قسم Fundamentals في رحلة R على Coddy — الدرس 65 من 78.
ماذا لو كنت بحاجة إلى معالجة كل حرف في سلسلة نصية بشكل فردي؟ على عكس المتجهات (vectors)، لا يمكنك التكرار مباشرة عبر أحرف السلسلة النصية في لغة R. تحل الدالة strsplit() هذه المشكلة عن طريق تقسيم السلسلة النصية إلى متجه من الأحرف.
تأخذ الدالة strsplit() وسيطين: السلسلة النصية المراد تقسيمها والفاصل. للتقسيم إلى أحرف فردية، استخدم سلسلة نصية فارغة "" كفاصل:
word <- "hello"
chars <- strsplit(word, "")[[1]]
print(chars)الناتج:
[1] "h" "e" "l" "l" "o"لاحظ الـ [[1]] في النهاية. هذا لأن strsplit() تُرجع قائمة، ونحتاج إلى استخراج العنصر الأول للحصول على متجه الأحرف الخاص بنا. بمجرد حصولك على الأحرف كمتجه، يمكنك التكرار عليها باستخدام التقنيات التي تعلمتها بالفعل:
word <- "R"
chars <- strsplit(word, "")[[1]]
for (char in chars) {
print(char)
}المخرجات:
[1] "R"تعد هذه التقنية ضرورية لمهام مثل عد أحرف معينة، أو عكس السلاسل النصية، أو التحقق من صحة المدخلات حرفاً بحرف.
التحدي
سهلستتلقى سطراً واحداً من الإدخال يحتوي على كلمة (على سبيل المثال، programming).
باستخدام strsplit() لتقسيم السلسلة النصية إلى أحرف فردية:
- قم بتقسيم كلمة الإدخال إلى متجه (vector) من الأحرف
- قم بالمرور عبر كل حرف في المتجه باستخدام حلقة تكرارية (loop)
- احسب عدد مرات ظهور حرف
"a"في الكلمة (حساس لحالة الأحرف) - اطبع كل حرف في سطر مستقل باستخدام
print() - بعد انتهاء الحلقة، اطبع العدد باستخدام
cat()بالتنسيق التالي:Count of 'a': Xمتبوعاً بسطر جديد
على سبيل المثال، إذا كان الإدخال هو:
bananaيجب أن يكون المخرج:
[1] "b"
[1] "a"
[1] "n"
[1] "a"
[1] "n"
[1] "a"
Count of 'a': 3الشرح: يتم تقسيم كلمة "banana" إلى أحرف c("b", "a", "n", "a", "n", "a"). يتم طباعة كل حرف، ويظهر حرف "a" ثلاث مرات.
جرّب بنفسك
# قراءة المدخلات
con <- file("stdin", "r")
word <- suppressWarnings(readLines(con, n = 1))
# تهيئة عداد للحرف 'a'
count_a <- 0
# TODO: اكتب كودك أدناه
# 1. استخدم strsplit() لتقسيم الكلمة إلى أحرف فردية
# 2. قم بالمرور (loop) عبر كل حرف
# 3. اطبع كل حرف باستخدام print()
# 4. احسب عدد مرات ظهور 'a'
# إخراج عدد مرات ظهور 'a'
cat("Count of 'a': ", count_a, "\n", sep = "")يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الثاني
المعاملات المنطقية (AND, OR)المعاملات المنطقية - الجزء الثاني (NOT)مراجعة - المنطق البسيطالمنطق المتجهي - الجزء الأولالمنطق المتجهي - الجزء الثاني2المتغيرات وأنواع البيانات
نوع البيانات الرقمينوع البيانات الصحيحنوع البيانات الحرفينوع البيانات المنطقيالتحقق من أنواع البياناتقواعد التسميةالقيم المفقودة: NAملخص - إنشاء المتغيرات8الحلقات التكرارية
حلقة Forحلقة Whileجملة Breakجملة Next (Continue)مراجعة - المضروب (Factorial)توليد المتتاليات (seq, :)الحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)3المعاملات - الجزء الأول
المعاملات الحسابيةقسمة الأعداد الصحيحة وباقي القسمةمعاملات الإسنادملخص - عمليات رياضية بسيطةمعاملات المقارنة6أساسيات الإدخال والإخراج
طباعة المخرجاتاستخدام Cat للمخرجاتالمخرجات مع المتغيراتقراءة المدخلات باستخدام readline()أساسيات تحويل أنواع البياناتمراجعة - حاسبة العمرمراجعة - صح أم خطأ12التكرار عبر التسلسلات
التكرار عبر عناصر الـ Vectorاستخدام ()seq_alongالتكرار عبر المحارف (strsplit)دوال معالجة السلاسل النصية