التكرار عبر المحارف (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" ثلاث مرات.
ورقة مرجعية
لتقسيم سلسلة نصية إلى أحرف فردية، استخدم strsplit() مع سلسلة فارغة "" كفاصل:
word <- "hello"
chars <- strsplit(word, "")[[1]]
print(chars)المخرجات:
[1] "h" "e" "l" "l" "o"يقوم [[1]] باستخراج العنصر الأول من القائمة التي ترجعها strsplit()، مما يمنحك متجهاً حرفياً (character vector).
يمكنك بعد ذلك المرور عبر الأحرف باستخدام حلقة (loop):
word <- "R"
chars <- strsplit(word, "")[[1]]
for (char in chars) {
print(char)
}جرّب بنفسك
# قراءة المدخلات
con <- file("stdin", "r")
word <- suppressWarnings(readLines(con, n = 1))
# تهيئة عداد للحرف 'a'
count_a <- 0
# TODO: اكتب الكود الخاص بك أدناه
# 1. استخدم strsplit() لتقسيم الكلمة إلى أحرف فردية
# 2. قم بالمرور عبر كل حرف
# 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)دوال معالجة السلاسل النصية