السلاسل النصية (علوم الحاسوب)

في برمجة الحاسوب ، تُعرَّف السلسلة تقليديًا بأنها تسلسل من الأحرف، إما كقيمة ثابتة أو كمتغير . يسمح المتغير بتغيير عناصر السلسلة وطولها ، أو قد يكون ثابتًا بعد إنشائها. غالبًا ما تُنفَّذ السلسلة كبنية بيانات مصفوفة من البايتات (أو الكلمات ) التي تخزن تسلسلًا من العناصر، عادةً الأحرف، باستخدام ترميز أحرف معين . وبشكل أعم، قد تشير السلسلة أيضًا إلى تسلسل (أو قائمة ) من البيانات غير الأحرف فقط.
اعتمادًا على لغة البرمجة ونوع البيانات المحدد المستخدم، قد يؤدي تعريف متغير على أنه سلسلة نصية إما إلى تخصيص مساحة تخزين ثابتة في الذاكرة لطول أقصى محدد مسبقًا أو استخدام التخصيص الديناميكي للسماح له باحتواء عدد متغير من العناصر.
عندما يظهر نص حرفيًا في شفرة المصدر ، يُعرف باسم النص الحرفي أو النص المجهول. [ 1 ]
في اللغات الرسمية ، التي تستخدم في المنطق الرياضي وعلوم الحاسوب النظرية ، فإن السلسلة عبارة عن تسلسل محدود من الرموز التي يتم اختيارها من مجموعة تسمى الأبجدية .
غاية
تتمثل إحدى الأغراض الرئيسية للسلاسل النصية في تخزين النصوص القابلة للقراءة البشرية، مثل الكلمات والجمل. تُستخدم السلاسل النصية لنقل المعلومات من برنامج حاسوبي إلى مستخدم البرنامج. [ 2 ] قد يقبل البرنامج أيضًا مدخلات نصية من المستخدم. علاوة على ذلك، قد تخزن السلاسل النصية بيانات مُعبر عنها بأحرف ولكنها غير مُخصصة للقراءة البشرية.
أمثلة على السلاسل النصية وأغراضها:
- رسالة مثل "
file upload complete" هي سلسلة نصية يعرضها البرنامج للمستخدمين النهائيين . في شفرة المصدر للبرنامج ، من المرجح أن تظهر هذه الرسالة كسلسلة نصية حرفية . - نص يُدخله المستخدم، مثل "
I got a new job today" كتحديث للحالة على خدمة التواصل الاجتماعي . بدلاً من نص حرفي، من المرجح أن يقوم البرنامج بتخزين هذا النص في قاعدة بيانات . - البيانات الأبجدية، مثل "
AGATGCCGT" التي تمثل تسلسلات الأحماض النووية للحمض النووي . [ 3 ] - إعدادات أو معلمات الكمبيوتر، مثل " " كسلسلة استعلام
?action=editURL . غالبًا ما يُقصد بها أن تكون قابلة للقراءة البشرية إلى حد ما، على الرغم من أن الغرض الأساسي منها هو التواصل مع أجهزة الكمبيوتر.
قد يشير مصطلح "سلسلة" أيضًا إلى تسلسل من البيانات أو سجلات الحاسوب بخلاف الأحرف - مثل "سلسلة من البتات " - ولكن عند استخدامه دون تحديد، فإنه يشير إلى سلاسل من الأحرف. [ 4 ]
تاريخ
يعود استخدام كلمة "سلسلة" للدلالة على أي عناصر مرتبة في خط أو سلسلة أو تسلسل إلى قرون مضت. [ 5 ] [ 6 ] في مجال الطباعة في القرن التاسع عشر، استخدم عمال الطباعة مصطلح "سلسلة" للدلالة على طول الحروف المطبوعة على الورق؛ وكان يتم قياس هذه السلسلة لتحديد أجر عامل الطباعة. [ 7 ] [ 4 ] [ 8 ]
إن استخدام كلمة "سلسلة" بمعنى "تسلسل من الرموز أو العناصر اللغوية بترتيب محدد" قد نشأ من الرياضيات والمنطق الرمزي والنظرية اللغوية للتحدث عن السلوك الرسمي للأنظمة الرمزية، بغض النظر عن معنى الرموز. [ 4 ]
على سبيل المثال، كتب عالم المنطق سي آي لويس في عام 1918: [ 9 ]
النظام الرياضي هو أي مجموعة من سلاسل العلامات المميزة، حيث تُؤخذ بعض هذه السلاسل مبدئيًا، ويُشتق الباقي منها عبر عمليات تُجرى وفقًا لقواعد مستقلة عن أي معنى مُسند للعلامات. ولا يُعتدّ بكون النظام يتكون من "علامات" بدلًا من أصوات أو روائح.
وفقًا لجين إي. ساميت ، كانت لغة COMIT في الخمسينيات من القرن الماضي "أول لغة واقعية لمعالجة السلاسل ومطابقة الأنماط" لأجهزة الكمبيوتر ، تلتها لغة SNOBOL في أوائل الستينيات. [ 10 ]
أنواع بيانات السلاسل النصية
نوع بيانات السلسلة النصية هو نوع بيانات مُصمّم على غرار مفهوم السلسلة النصية الرسمية. تُعدّ السلاسل النصية من أنواع البيانات المهمة والمفيدة لدرجة أنها مُطبّقة في جميع لغات البرمجة تقريبًا . في بعض اللغات، تتوفر كأنواع أساسية ، وفي لغات أخرى كأنواع مُركّبة . يسمح بناء جملة معظم لغات البرمجة عالية المستوى بتمثيل سلسلة نصية، عادةً ما تكون مُحاطة بعلامات اقتباس بطريقة ما، كمثال على نوع بيانات السلسلة النصية؛ تُسمى هذه السلسلة النصية المُعرّفة "نصًا حرفيًا" أو "نصًا حرفيًا" .
طول السلسلة
على الرغم من أن السلاسل النصية الرسمية يمكن أن يكون لها طول محدود، إلا أن طول السلاسل في اللغات الحقيقية غالبًا ما يكون مقيدًا بحد أقصى اصطناعي. بشكل عام، يوجد نوعان من أنواع بيانات السلاسل النصية: السلاسل ذات الطول الثابت ، والتي لها طول أقصى ثابت يُحدد وقت الترجمة ، وتستخدم نفس مقدار الذاكرة سواءً كانت هذه القيمة القصوى مطلوبة أم لا؛ والسلاسل ذات الطول المتغير ، والتي لا يكون طولها ثابتًا بشكل اعتباطي، ويمكنها استخدام كميات متفاوتة من الذاكرة اعتمادًا على المتطلبات الفعلية أثناء التشغيل (انظر إدارة الذاكرة ). معظم السلاسل النصية في لغات البرمجة الحديثة هي سلاسل ذات طول متغير. بالطبع، حتى السلاسل ذات الطول المتغير محدودة في الطول بمقدار الذاكرة المتاحة. يمكن تخزين طول السلسلة كعدد صحيح منفصل (مما قد يفرض حدًا اصطناعيًا آخر على الطول) أو ضمنيًا من خلال حرف إنهاء، عادةً ما يكون قيمة حرفية جميع بتاتها أصفار، كما هو الحال في لغة البرمجة C. انظر أيضًا " السلاسل المنتهية بصفر " أدناه.
ترميز الأحرف
لطالما خصصت أنواع بيانات السلاسل بايتًا واحدًا لكل حرف، وعلى الرغم من اختلاف مجموعة الأحرف الدقيقة باختلاف المناطق، إلا أن ترميزات الأحرف كانت متشابهة بما يكفي ليتمكن المبرمجون غالبًا من تجاهل هذا الأمر، نظرًا لأن الأحرف التي يعاملها البرنامج بشكل خاص (مثل النقطة والمسافة والفاصلة) كانت في نفس الموضع في جميع الترميزات التي سيواجهها البرنامج. وكانت مجموعات الأحرف هذه تستند عادةً إلى ASCII أو EBCDIC . وإذا عُرض نصٌّ بترميزٍ ما على نظامٍ يستخدم ترميزًا مختلفًا، فغالبًا ما كان النص يُشوَّه ، وإن كان غالبًا ما يكون مقروءًا إلى حدٍّ ما، وقد تعلّم بعض مستخدمي الحاسوب قراءة النص المشوه.
تحتاج اللغات التصويرية مثل الصينية واليابانية والكورية (المعروفة مجتمعةً باسم CJK ) إلى أكثر بكثير من 256 حرفًا (الحد الأقصى لترميز بايت واحد لكل حرف، 8 بت) لتمثيلها بشكل معقول. تضمنت الحلول التقليدية استخدام تمثيلات أحادية البايت لرموز ASCII وتمثيلات ثنائية البايت لرموز CJK . أدى استخدام هذه الحلول مع التعليمات البرمجية الموجودة إلى مشاكل في مطابقة السلاسل النصية وقصها، وتفاوتت حدة هذه المشاكل تبعًا لتصميم ترميز الأحرف. تضمن بعض الترميزات، مثل عائلة EUC، أن قيمة البايت في نطاق ASCII ستمثل حرف ASCII هذا فقط، مما يجعل الترميز آمنًا للأنظمة التي تستخدم هذه الأحرف كفواصل بين الحقول. بينما لا تقدم ترميزات أخرى، مثل ISO-2022 و Shift-JIS، مثل هذه الضمانات، مما يجعل المطابقة على رموز البايت غير آمنة. لم تكن هذه الترميزات أيضًا "متزامنة ذاتيًا"، لذا فإن تحديد حدود الأحرف يتطلب الرجوع إلى بداية السلسلة، ويمكن أن يؤدي لصق سلسلتين معًا إلى تلف السلسلة الثانية.
لقد بسّطت يونيكود الصورة إلى حد ما. فمعظم لغات البرمجة الآن تحتوي على نوع بيانات لسلاسل يونيكود. صُمم تنسيق دفق البايتات المفضل لدى يونيكود، UTF-8، لتجنب المشاكل المذكورة أعلاه في ترميزات البايتات المتعددة القديمة. تتطلب ترميزات UTF-8 وUTF-16 و UTF-32 من المبرمج معرفة أن وحدات الترميز ذات الحجم الثابت تختلف عن "الأحرف"، وتكمن الصعوبة الرئيسية حاليًا في واجهات برمجة التطبيقات المصممة بشكل خاطئ والتي تحاول إخفاء هذا الاختلاف (مع أن UTF-32 يجعل نقاط الترميز ذات حجم ثابت، إلا أنها ليست "أحرفًا" نظرًا لتركيبها للرموز).
التطبيقات
تسمح بعض لغات البرمجة، مثل C++ و Perl و Ruby ، عادةً بتغيير محتوى السلسلة النصية بعد إنشائها؛ وتُسمى هذه السلاسل النصية القابلة للتغيير . أما في لغات أخرى، مثل Java و JavaScript و Lua و Python و Go ، فتكون القيمة ثابتة، ويجب إنشاء سلسلة نصية جديدة لإجراء أي تعديل؛ وتُسمى هذه السلاسل النصية غير القابلة للتغيير . توفر بعض هذه اللغات التي تدعم السلاسل النصية غير القابلة للتغيير نوعًا آخر قابلًا للتغيير، مثل Java و .NET ، و StringBuilderJava الآمنة للاستخدام المتزامن StringBuffer، و CocoaNSMutableString . يُصاحب عدم قابلية التغيير مزايا وعيوب: فبينما قد تتطلب السلاسل النصية غير القابلة للتغيير إنشاء نسخ متعددة، إلا أنها أبسط وأكثر أمانًا للاستخدام المتزامن .
تُنفَّذ السلاسل النصية عادةً على شكل مصفوفات من البايتات أو الأحرف أو وحدات الترميز، مما يسمح بالوصول السريع إلى الوحدات الفردية أو السلاسل الفرعية، بما في ذلك الأحرف عندما يكون لها طول ثابت. في المقابل ، تُنفِّذ بعض اللغات، مثل هاسكل، السلاسل النصية على شكل قوائم مرتبطة .
توفر العديد من اللغات عالية المستوى السلاسل كنوع بيانات أساسي، مثل JavaScript و PHP ، بينما توفرها معظم اللغات الأخرى كنوع بيانات مركب، وبعضها يدعم كتابة القيم الحرفية بشكل خاص، على سبيل المثال، Java و C# .
تتجنب بعض لغات البرمجة، مثل C و Prolog و Erlang ، تخصيص نوع بيانات للسلاسل النصية، وتعتمد بدلاً من ذلك على تمثيل السلاسل النصية كقوائم من رموز الأحرف. حتى في لغات البرمجة التي تحتوي على نوع بيانات مخصص للسلاسل النصية، يمكن عادةً التعامل مع السلاسل النصية كسلسلة من رموز الأحرف، مثل قوائم الأعداد الصحيحة أو غيرها من القيم.
التمثيلات
تعتمد تمثيلات السلاسل النصية بشكل كبير على اختيار مجموعة الأحرف وطريقة ترميزها. صُممت تطبيقات السلاسل النصية القديمة للعمل مع مجموعة الأحرف والترميز المُحددين بواسطة ASCII، أو امتدادات أحدث مثل سلسلة ISO 8859. أما التطبيقات الحديثة، فتستخدم غالبًا مجموعة الأحرف الواسعة المُحددة بواسطة Unicode إلى جانب مجموعة متنوعة من الترميزات المعقدة مثل UTF-8 وUTF-16.
يشير مصطلح " سلسلة البايت" عادةً إلى سلسلة عامة من البايتات، وليس إلى سلاسل من الأحرف (القابلة للقراءة) فقط، أو سلاسل من البتات، أو ما شابه. وتوحي سلاسل البايت غالبًا بأن البايتات يمكن أن تأخذ أي قيمة، ويمكن تخزين أي بيانات كما هي، أي أنه لا ينبغي تفسير أي قيمة على أنها قيمة إنهاء.
تتشابه معظم تطبيقات السلاسل النصية إلى حد كبير مع المصفوفات ذات الطول المتغير ، حيث تخزن عناصرها رموز الأحرف المقابلة. ويكمن الاختلاف الرئيسي في أنه مع بعض الترميزات، قد يشغل حرف منطقي واحد أكثر من عنصر واحد في المصفوفة. يحدث هذا، على سبيل المثال، مع ترميز UTF-8، حيث يمكن أن تشغل الرموز المفردة ( نقاط ترميز UCS ) من بايت واحد إلى أربعة بايتات، ويمكن أن يشغل الحرف الواحد عددًا غير محدد من الرموز. في هذه الحالات، يختلف الطول المنطقي للسلسلة (عدد الأحرف) عن الطول الفعلي للمصفوفة (عدد البايتات المستخدمة). يتجنب ترميز UTF-32 الجزء الأول من هذه المشكلة.
متجهات رائعة
يمكن تخزين طول السلسلة في متجه بيانات ، منفصل عن مساحة تخزين الأحرف الفعلية. استخدم مُصرّف IBM PL/I (F) متجه بيانات السلسلة [ 11 ] (SDV) للسلاسل ذات الأطوال المتغيرة ولمرور معلمات السلسلة. يحتوي متجه بيانات السلسلة على الطول الحالي والطول الأقصى، وهو غير مُجاور للسلسلة نفسها. بعد إصدار PL/I (F)، تخلّت IBM عن متجه بيانات السلسلة لصالح السلاسل التي تبدأ بطولها.
غير منتهي
يمكن تخزين طول السلسلة ضمنيًا باستخدام حرف إنهاء خاص؛ غالبًا ما يكون هذا الحرف هو الحرف الفارغ (NUL)، الذي تكون جميع بتاته أصفارًا، وهو اصطلاح مُستخدم ومُعتمد في لغة البرمجة C الشهيرة . [ 12 ] ولذلك، يُشار إلى هذا التمثيل عادةً باسم سلسلة C. يشغل هذا التمثيل لسلسلة مكونة من n حرفًا مساحة n + 1 (1 لحرف الإنهاء)، وبالتالي فهو بنية بيانات ضمنية .
في السلاسل النصية المنتهية، لا يُسمح باستخدام رمز الإنهاء في أي سلسلة نصية. أما السلاسل النصية التي تحتوي على حقل طول ، فلا تخضع لهذا القيد، ويمكنها أيضًا تخزين بيانات ثنائية عشوائية .
مثال على سلسلة نصية منتهية بـ null مخزنة في مخزن مؤقت بحجم 10 بايت ، بالإضافة إلى تمثيلها ASCII (أو UTF-8 الأكثر حداثة) كأرقام سداسية عشرية مكونة من 8 بتات هو:
F | R | A | N | K | نول | k | e | f | w |
| 46 16 | 52 16 | 41 16 | 4E 16 | 4ب 16 | 00 16 | 6ب 16 | 65 16 | 66 16 | 77 16 |
يبلغ طول السلسلة في المثال أعلاه، " FRANK"، خمسة أحرف، لكنها تشغل ستة بايتات. لا تُشكّل الأحرف التي تلي حرف الإنهاء جزءًا من التمثيل؛ فقد تكون جزءًا من بيانات أخرى أو مجرد بيانات عشوائية. (تُسمى السلاسل من هذا النوع أحيانًا سلاسل ASCIZ ، نسبةً إلى توجيه لغة التجميع الأصلي المستخدم لتعريفها).
منتهية بالبايت والبت
لقد ظهر استخدام بايت خاص غير البايت الفارغ لإنهاء السلاسل تاريخيًا في كل من الأجهزة [ a ] والبرامج، وإن كان أحيانًا بقيمة كانت أيضًا حرف طباعة. $تم استخدام البايت الخاص [a] بواسطة العديد من أنظمة التجميع، :وتم استخدامه بواسطة أنظمة CDC (كان لهذا الحرف قيمة صفر)، واستخدم جهاز ZX80 البايت الخاص "[ 15 ] لأنه كان فاصل السلسلة في لغة BASIC الخاصة به.
على نحو مشابه، استخدمت أجهزة "معالجة البيانات" مثل IBM 1401 بتًا خاصًا لتمييز الكلمات، وذلك لتحديد بداية السلاسل النصية من اليسار، حيث تبدأ العملية من اليمين. وكان يجب أن يكون هذا البت فارغًا في جميع أجزاء السلسلة النصية الأخرى. هذا يعني أنه على الرغم من أن IBM 1401 كان يحتوي على كلمة مكونة من سبعة بتات، إلا أنه لم يفكر أحد تقريبًا في استخدام هذه الميزة، وتجاوز تخصيص البت السابع (على سبيل المثال) لمعالجة رموز ASCII.
اعتمدت برامج الحواسيب الصغيرة المبكرة على حقيقة أن رموز ASCII لا تستخدم البت الأعلى، وتضبطه للإشارة إلى نهاية السلسلة. يجب إعادة ضبطه إلى 0 قبل الإخراج. [ 16 ]
الطول المحدد
يمكن أيضًا تخزين طول السلسلة بشكل صريح، على سبيل المثال عن طريق إضافة طول السلسلة كقيمة بايت. يُستخدم هذا الأسلوب في العديد من لهجات باسكال ؛ ونتيجة لذلك، يُطلق البعض على هذه السلسلة اسم سلسلة باسكال أو سلسلة P. يحد تخزين طول السلسلة كبايت من الحد الأقصى لطول السلسلة إلى 255. لتجنب هذه القيود، تستخدم التطبيقات المحسّنة لسلاسل P كلمات 16 أو 32 أو 64 بت لتخزين طول السلسلة. عندما يغطي حقل الطول مساحة العنوان ، فإن السلاسل محدودة فقط بالذاكرة المتاحة .
إذا كان طول السلسلة محدودًا، فيمكن ترميزها في مساحة ثابتة، عادةً ما تكون كلمة واحدة، مما يؤدي إلى بنية بيانات ضمنية تشغل مساحة n + k ، حيث k هو عدد الأحرف في الكلمة (8 لترميز ASCII ذي 8 بت على جهاز 64 بت، و1 لترميز UTF-32/UCS-4 ذي 32 بت على جهاز 32 بت، وهكذا). أما إذا كان طول السلسلة غير محدود، فإن ترميز سلسلة بطول n يشغل مساحة log( n ) (انظر الترميز ذي الطول الثابت )، لذا فإن السلاسل التي تبدأ ببادئة طولية تُعد بنية بيانات مختصرة ، حيث تُرمّز سلسلة بطول n في مساحة log( n ) + n .
في الحالة الأخيرة، لا يمتلك حقل بادئة الطول نفسه طولًا ثابتًا، لذلك يجب نقل بيانات السلسلة الفعلية عندما تنمو السلسلة بحيث يلزم زيادة حقل الطول.
فيما يلي سلسلة باسكال مخزنة في مخزن مؤقت بحجم 10 بايت، بالإضافة إلى تمثيلها ASCII / UTF-8:
| طول | F | R | A | N | K | k | e | f | w |
| 05 16 | 46 16 | 52 16 | 41 16 | 4E 16 | 4ب 16 | 6ب 16 | 65 16 | 66 16 | 77 16 |
السلاسل كسجلات
تُنفذ العديد من اللغات، بما في ذلك اللغات الموجهة للكائنات، السلاسل النصية كسجلات ذات بنية داخلية مثل:
public final class String { private unsigned long length ; // طول السلسلة private UniquePointer < char [] > text ; // ملكية صريحة // الدوال العامة... }مع ذلك، ولأن التنفيذ عادةً ما يكون مخفيًا ، يجب الوصول إلى السلسلة وتعديلها عبر دوال الأعضاء. textهو مؤشر إلى منطقة ذاكرة مُخصصة ديناميكيًا، والتي قد يتم توسيعها حسب الحاجة. انظر أيضًا string (C++) .
تمثيلات أخرى
يحد كل من إنهاء الأحرف ورموز الطول من السلاسل النصية: على سبيل المثال، لا يمكن التعامل مع مصفوفات الأحرف C التي تحتوي على أحرف فارغة (NUL) بشكل مباشر بواسطة وظائف مكتبة السلاسل النصية C : تقتصر السلاسل النصية التي تستخدم رمز طول على القيمة القصوى لرمز الطول.
يمكن التغلب على هذين القيدين من خلال البرمجة الذكية.
من الممكن إنشاء هياكل بيانات ووظائف تعالجها دون مشاكل إنهاء الأحرف، ويمكنها من حيث المبدأ تجاوز قيود ترميز الطول. كما يمكن تحسين السلسلة المُمثلة باستخدام تقنيات من ترميز طول التشغيل (استبدال الأحرف المتكررة بقيمة الحرف وطوله) وترميز هامينغ .
مع أن هذه التمثيلات شائعة، إلا أن هناك تمثيلات أخرى ممكنة. استخدام الحبال يجعل بعض عمليات السلاسل النصية، مثل الإضافة والحذف والدمج، أكثر كفاءة.
تُعدّ بنية البيانات الأساسية في محرر النصوص هي تلك التي تُدير السلسلة (تسلسل الأحرف) التي تُمثّل الحالة الحالية للملف قيد التحرير. وبينما يُمكن تخزين هذه الحالة في مصفوفة طويلة متتالية من الأحرف، يستخدم محرر النصوص النموذجي تمثيلاً بديلاً كبنية بيانات تسلسلية - مثل مخزن الفجوات ، أو قائمة مرتبطة من الأسطر، أو جدول الأجزاء ، أو سلسلة الأحرف - مما يجعل بعض عمليات السلسلة، مثل الإضافة والحذف والتراجع عن التعديلات السابقة، أكثر كفاءة. [ 17 ]
مخاوف أمنية
قد يؤثر اختلاف تخطيط الذاكرة ومتطلبات التخزين للسلاسل النصية على أمان البرنامج الذي يصل إلى بيانات السلسلة. فعادةً ما تكون تمثيلات السلاسل النصية التي تتطلب حرف إنهاء عرضةً لمشاكل تجاوز سعة المخزن المؤقت إذا لم يكن حرف الإنهاء موجودًا، سواءً كان ذلك بسبب خطأ برمجي أو قيام مهاجم بتغيير البيانات عمدًا. كما أن تمثيلات السلاسل النصية التي تعتمد حقل طول منفصل تكون عرضةً للمشاكل أيضًا إذا أمكن التلاعب بالطول. في مثل هذه الحالات، يتطلب رمز البرنامج الذي يصل إلى بيانات السلسلة النصية فحصًا للحدود لضمان عدم وصوله عن غير قصد إلى بيانات خارج حدود ذاكرة السلسلة أو تغييرها.
تُستقى البيانات النصية عادةً من مدخلات المستخدم للبرنامج. لذا، يقع على عاتق البرنامج مسؤولية التحقق من صحة هذه البيانات لضمان تمثيلها للتنسيق المطلوب. قد يؤدي عدم إجراء التحقق الكافي أو انعدامه من مدخلات المستخدم إلى جعل البرنامج عرضةً لهجمات حقن التعليمات البرمجية .
سلاسل حرفية
أحيانًا، يتطلب الأمر تضمين سلاسل نصية داخل ملف نصي قابل للقراءة البشرية ومُعدّ للاستخدام الآلي. هذا ضروري، على سبيل المثال، في شفرة المصدر للغات البرمجة، أو في ملفات الإعدادات. في هذه الحالة، لا يُعدّ حرف NUL مناسبًا كفاصل للسلسلة، لأنه غير مرئي عادةً (غير قابل للطباعة) ويصعب إدخاله عبر لوحة المفاتيح. كما أن تخزين طول السلسلة سيكون غير عملي، إذ أن حساب الطول وتتبعه يدويًا أمر شاق وعرضة للأخطاء.
من بين التمثيلات الشائعة ما يلي:
- تُستخدم علامات الاقتباس ( علامة اقتباس مزدوجة ASCII 0x22
"str"أو علامة اقتباس مفردة ASCII 0x27'str') في معظم لغات البرمجة. ولإدراج أحرف خاصة مثل علامة الاقتباس نفسها، أو أحرف السطر الجديد، أو الأحرف غير القابلة للطباعة، تتوفر عادةً تسلسلات الهروب ، والتي تُسبق عادةً بحرف الشرطة المائلة العكسية (ASCII 0x5C). - يتم إنهاؤها بواسطة تسلسل سطر جديد ، على سبيل المثال في ملفات INI الخاصة بنظام التشغيل Windows .
سلاسل غير نصية
على الرغم من شيوع استخدام السلاسل النصية، إلا أن مصطلح "سلسلة نصية" في علوم الحاسوب قد يشير بشكل عام إلى أي تسلسل من البيانات المتجانسة. فعلى سبيل المثال، يمكن استخدام سلسلة بتات أو سلسلة بايتات لتمثيل البيانات الثنائية غير النصية المسترجعة من وسيط اتصال. وقد تُمثَّل هذه البيانات بنوع بيانات خاص بالسلاسل النصية أو لا، وذلك حسب احتياجات التطبيق، ورغبة المبرمج، وإمكانيات لغة البرمجة المستخدمة. وإذا لم يكن تنفيذ السلاسل النصية في لغة البرمجة متوافقًا مع معيار 8 بت ، فقد يحدث تلف في البيانات.
يُفرّق مبرمجو لغة C بوضوح بين "السلسلة النصية"، أو "سلسلة الأحرف"، التي تنتهي دائمًا بحرف فارغ، و"مصفوفة الأحرف"، التي قد تُخزّن في نفس المصفوفة ولكنها غالبًا لا تنتهي بحرف فارغ. يبدو استخدام دوال معالجة السلاسل النصية في لغة C على مصفوفة الأحرف هذه ناجحًا في كثير من الأحيان، ولكنه يؤدي لاحقًا إلى مشاكل أمنية . [ 18 ] [ 19 ] [ 20 ]
خوارزميات معالجة السلاسل النصية
توجد العديد من الخوارزميات لمعالجة النصوص، ولكل منها مزاياها وعيوبها. ويمكن تحليل الخوارزميات المتنافسة من حيث وقت التشغيل، ومتطلبات التخزين، وما إلى ذلك. وقد صاغ عالم الحاسوب تسفي غاليل مصطلح "علم السلاسل النصية " عام ١٩٨٤ لوصف نظرية الخوارزميات وهياكل البيانات المستخدمة في معالجة النصوص. [ ٢١ ] [ ٢٢ ] [ ٢٣ ]
تتضمن بعض فئات الخوارزميات ما يلي:
- خوارزميات البحث عن السلاسل النصية للعثور على سلسلة فرعية أو نمط معين
- خوارزميات معالجة السلاسل النصية
- خوارزميات الفرز
- خوارزميات التعبيرات النمطية
- تحليل سلسلة نصية
- استخراج التسلسل
تستخدم خوارزميات السلاسل المتقدمة في كثير من الأحيان آليات وهياكل بيانات معقدة، من بينها أشجار اللواحق وآلات الحالة المحدودة .
لغات وأدوات موجهة نحو سلاسل الأحرف
تُعدّ السلاسل النصية نوعًا مفيدًا جدًا من البيانات، لدرجة أنه تم تصميم العديد من لغات البرمجة لتسهيل كتابة تطبيقات معالجة السلاسل النصية. ومن الأمثلة على ذلك اللغات التالية:
تُتيح العديد من أدوات يونكس إجراء عمليات بسيطة على النصوص، ويمكن استخدامها لبرمجة بعض خوارزميات معالجة النصوص القوية بسهولة. ويمكن اعتبار الملفات والتدفقات المحدودة بمثابة نصوص.
تستخدم بعض واجهات برمجة التطبيقات مثل واجهة التحكم بالوسائط المتعددة ، أو SQL المضمن ، أو printf، سلاسل نصية لحفظ الأوامر التي سيتم تفسيرها.
تستخدم العديد من لغات البرمجة النصية ، بما في ذلك بيرل وبايثون وروبي وتي سي إل، التعابير النمطية لتسهيل عمليات النصوص. وتُعرف بيرل تحديدًا باستخدامها للتعابير النمطية، [ 24 ] كما أن العديد من اللغات والتطبيقات الأخرى تُطبّق تعابير نمطية متوافقة مع بيرل .
تدعم بعض اللغات مثل بيرل وروبي عملية استيفاء السلاسل النصية ، مما يسمح بتقييم التعبيرات العشوائية وإدراجها في السلاسل النصية الحرفية.
دوال سلسلة الأحرف
تُستخدم دوال السلاسل النصية لإنشاء سلاسل نصية أو تغيير محتويات سلسلة نصية قابلة للتعديل. كما تُستخدم أيضًا للاستعلام عن معلومات حول سلسلة نصية. وتختلف مجموعة الدوال وأسماؤها باختلاف لغة البرمجة .
أبسط مثال على دوال السلاسل النصية هو دالة طول السلسلة ، وهي الدالة التي تُعيد طول السلسلة (دون احتساب أحرف الإنهاء أو أي معلومات هيكلية داخلية أخرى) ولا تُجري أي تعديلات عليها. غالبًا ما تُسمى هذه الدالة `string` أو `string` أو ` string` . على سبيل المثال، length` string` تُعيد 11. ومن الدوال الشائعة الأخرى دالة دمج السلاسل النصية ، حيث تُنشأ سلسلة نصية جديدة بدمج سلسلتين نصيتين، وغالبًا ما يكون ذلك باستخدام عامل الجمع `+`.lensizelength("hello world")
تحتوي بعض بنى مجموعات تعليمات المعالجات الدقيقة على دعم مباشر لعمليات السلاسل النصية، مثل نسخ الكتل (على سبيل المثال في معالجات Intel x86m ). [ 25 ]REPNZ MOVSB
النظرية الرسمية
يتركليكن مجموعة منتهية من الرموز المتميزة وغير المبهمة (وتسمى أيضًا الأحرف)، وتسمى الأبجدية . سلسلة ( أو كلمة [ 26 ] أو تعبير [ 27 ] ) علىأي سلسلة محدودة من الرموز من[ 28 ] على سبيل المثال ، إذا، ثمهو سلسلة فوق.
طول الخيطعدد الرموز في(طول المتتالية) ويمكن أن يكون أي عدد صحيح غير سالب ؛ وغالبًا ما يُرمز إليه بـالسلسلة الفارغة هي السلسلة الفريدة علىمن الطول، ويُشار إليه بـأو[ 28 ] [ 29 ]
مجموعة جميع السلاسل فوقمن الطوليُشار إليه بـعلى سبيل المثال، إذا، ثملدينالكل حرف أبجدي.
مجموعة جميع السلاسل فوقأي طول هو إغلاق كلين لـويُشار إليه بـ. من ناحية،
على سبيل المثال، إذا، ثمعلى الرغم من أن المجموعةهي نفسها لانهائية قابلة للعد ، كل عنصر من عناصرهاهي سلسلة ذات طول محدود.
مجموعة من الخيوط فوق(أي أي مجموعة فرعية منيُطلق عليها اسم لغة رسميةعلى سبيل المثال، إذا، مجموعة السلاسل النصية التي تحتوي على عدد زوجي من الأصفار،، هي لغة رسمية.
دمج السلاسل الفرعية
عملية الربط هيعملية ثنائية مهمةلأي سلسلتينوفي، ويُعرَّف تسلسلها بأنه سلسلة الرموز فيمتبوعًا بتسلسل الأحرف في، ويُشار إليه بـعلى سبيل المثال، إذا(أي الأبجدية الإنجليزية الصغيرة )،، و، ثمو.
عملية دمج السلاسل النصية هي عملية تجميعية ، ولكنها غير تبديلية . السلسلة النصية الفارغةيُستخدم كعنصر هوية ؛ لأي سلسلة نصية،لذلك، فإن المجموعةوتُشكّل عملية الربط أحاديًا ، وهو الأحادي الحر الناتج عنبالإضافة إلى ذلك، تُعرّف دالة الطول تشاكلًا أحاديًا منإلى الأعداد الصحيحة غير السالبة (أي دالة)بحيث).
خيطيُقال إنها سلسلة فرعية أو عامل منإذا كانت هناك سلاسل نصية (ربما فارغة)وبحيثتحدد العلاقة "سلسلة فرعية من" ترتيبًا جزئيًا على، وأصغر عنصر فيها هو السلسلة الفارغة.
البادئات واللواحق
خيطيقال إنها بادئة لـإذا كان هناك سلسلةبحيث. لوغير فارغ،ويُقال إنها بادئة مناسبة لـبشكل متناظر، خيطيقال إنها لاحقة منإذا كان هناك سلسلةبحيث. لوغير فارغ،ويُقال إنها لاحقة مناسبة لـاللواحق والبوادئ هي سلاسل فرعية من. كلا العلاقتين "هو بادئة لـ" و "هو لاحقة لـ" هما ترتيبات بادئة .
انعكاس
معكوس السلسلة هو سلسلة تحتوي على نفس الرموز ولكن بترتيب عكسي. على سبيل المثال، إذا(أين،، و(هي رموز الأبجدية)، ثم عكسهايكونسلسلة معكوسة (مثلاً،يُطلق على هذا الاسم اسم المتناظر ، والذي يشمل أيضًا السلسلة الفارغة وجميع السلاسل ذات الطول.
التناوب
خيطيقال إنها دورة منلوعلى سبيل المثال، إذاالسلسلةهو دوران، أينوكمثال آخر، السلسلةله ثلاث دورات مختلفة، وهي:نفسه (مع،)(مع)، و(مع).
الترتيب المعجمي
من المفيد غالبًا تحديد ترتيب لمجموعة من السلاسل النصية. إذا كانت الأبجديةله ترتيب كلي (انظر الترتيب الأبجدي )، ويمكن تعريف ترتيب كلي علىيُطلق عليه الترتيب المعجمي . يكون الترتيب المعجمي تامًا إذا كان الترتيب الأبجدي تامًا، ولكنه لا يكون ذا أساس متين لأي أبجدية غير بديهية، حتى لو كان الترتيب الأبجدي تامًا. على سبيل المثال، إذاوثم الترتيب المعجمي علىيشمل ذلك العلاقاتفيما يتعلق بهذا الترتيب، على سبيل المثال المجموعة اللانهائيةلا يحتوي على عنصر أدنى.
راجع Shortlex للاطلاع على ترتيب بديل للسلاسل النصية يحافظ على سلامة الأساس. بالنسبة للأبجدية المذكورة في المثال، يكون ترتيب Shortlex كالتالي:
عمليات السلاسل النصية
توجد عدة عمليات إضافية على السلاسل النصية شائعة في النظرية الرسمية. وقد وردت هذه العمليات في مقالة عمليات السلاسل النصية .
الطوبولوجيا

يمكن تفسير السلاسل النصية على النحو التالي كعقد على الرسم البياني، حيثعدد الرموز في:
- سلاسل ذات طول ثابتيمكن اعتبارها مواقع الأعداد الصحيحة فيمكعب فائق الأبعاد ذو أضلاع طولها.
- يمكن اعتبار السلاسل ذات الأطوال المتغيرة (ذات الطول المحدود) بمثابة عقد على سطح مثاليشجرة -ary .
- يمكن اعتبار السلاسل اللانهائية (التي لم يتم تناولها هنا) بمثابة مسارات لانهائية علىرسم بياني كامل مكون من عقدة واحدة .
الطوبولوجيا الطبيعية لمجموعة السلاسل ذات الطول الثابت أو المتغير هي الطوبولوجيا المنفصلة، بينما الطوبولوجيا الطبيعية لمجموعة السلاسل اللانهائية هي طوبولوجيا النهاية ، حيث تُعتبر مجموعة السلاسل اللانهائية النهاية العكسية لمجموعات السلاسل المنتهية. هذا هو البناء المستخدم للأعداد p -adic وبعض بنى مجموعة كانتور ، وينتج عنه نفس الطوبولوجيا.
يمكن إيجاد التماثلات بين تمثيلات السلاسل للطوبولوجيا عن طريق التطبيع وفقًا لدوران السلسلة الأدنى معجميًا .
انظر أيضاً
- آمن ثنائيًا - خاصية لوظائف معالجة السلاسل النصية التي تتعامل مع مدخلاتها كتدفق بيانات خام
- مصفوفة بتات — سلسلة من الأرقام الثنائية
- معالجة السلاسل النصية في لغة C - نظرة عامة على معالجة السلاسل النصية في لغة C
- معالجة السلاسل النصية في لغة C++ - نظرة عامة على معالجة السلاسل النصية في لغة C++
- مقارنة لغات البرمجة (وظائف السلاسل النصية)
- سلسلة الاتصال — يتم تمريرها إلى برنامج التشغيل لبدء الاتصال (على سبيل المثال، بقاعدة بيانات)
- السلسلة الفارغة - خصائصها وتمثيلها في لغات البرمجة
- سلسلة غير قابلة للضغط - سلسلة لا يمكن ضغطها بواسطة أي خوارزمية
- الحبل (بنية بيانات) - بنية بيانات لمعالجة السلاسل الطويلة بكفاءة
- التخزين الداخلي للسلاسل النصية - طريقة لتخزين نسخة واحدة فقط من كل قيمة سلسلة نصية مميزة، والتي يجب أن تكون غير قابلة للتغيير.
- مقياس السلسلة - مفاهيم التشابه بين السلاسل
ملاحظات توضيحية
- ↑ على سبيل المثال،تعليمات نقل العناصر RCA 501 (IT) [ 13 ] رمز فاصل العناصر (ISS)، وتستخدم تعليمات تحديد موقع الرمز RCA 301 (LSL، LSR)، ونقل البيانات بواسطة الرمز (DSL، DSR) ونقل الرمز للتعبئة (SF) [ 14 ] حرفًا في التعليمات.
مراجع
- ↑ "مقدمة إلى جافا - MFC 158 G" . مؤرشف من الأصل بتاريخ 2016-03-03.
تُسمى السلاسل النصية (أو الثوابت) "سلاسل نصية مجهولة".
- ↑ دي سانت جيرمان، إتش. جيمس. "الأوتار" . جامعة يوتا، كلية كاليرت للحوسبة .
- ↑ فرانسيس، ديفيد م.؛ ميرك، هيذر ل. (14 نوفمبر 2019). "الحمض النووي ككيان بيوكيميائي وسلسلة بيانات" .
- 1 2 3 بورشيفيلد، آر دبليو (1986). "سلسلة". ملحق لقاموس أكسفورد الإنجليزي . أكسفورد في مطبعة كلارندون.
- ↑ "سلسلة". قاموس أكسفورد الإنجليزي . المجلد العاشر. أكسفورد في مطبعة كلارندون. 1933.
- ↑ "سلسلة (اسم)" . قاموس أصل الكلمات على الإنترنت .
- ↑ ويتني، ويليام دوايت ؛ سميث، بنجامين إي. "سلسلة". قاموس القرن . نيويورك: شركة القرن. ص 5994.
- ↑ "زوال الاتحاد القديم". ميلووكي سنتينل . 11 يناير 1898. ص 3.
- ↑ لويس، سي آي (1918). مسح للمنطق الرمزي . بيركلي: مطبعة جامعة كاليفورنيا. ص 355.
- ↑ ساميت، جان إي. (يوليو 1972). "لغات البرمجة: التاريخ والمستقبل" (ملف PDF) . مجلة اتصالات رابطة مكائن الحوسبة . 15 (7). doi : 10.1145/361454.361485 . S2CID 2003242 .
- ↑ "بيانات السلاسل النصية" (ملف PDF) . نظام التشغيل IBM System/360 - PL/I (F) - دليل المبرمج - رقم البرنامج 360S-NL-5ll (ملف PDF) . مكتبة مراجع الأنظمة ( الطبعة الخامسة). نوفمبر 1968. صفحة 136. C28-6594-4 . تاريخ الاسترجاع: 2 سبتمبر 2025. تحتوي البيانات ذات الأطوال المتغيرة على مناطق تحكم مرتبطة بها تُعرف باسم "متجهات الوصف" التي تصف السلاسل النصية .
يحتوي متجه الوصف على سجل لأقصى طول وطول السلسلة النصية الحالي، بالإضافة إلى مؤشر إلى بداية السلسلة. لا يشترط أن تكون متجهات الوصف مجاورة للبيانات التي تصفها، ولكنها عادةً ما تشغل مساحة تخزين من نفس فئة التخزين.
- ↑ براينت، راندال إي .؛ ديفيد، أوهالارون (2003)، أنظمة الحاسوب: منظور المبرمج ( طبعة 2003)، أبر سادل ريفر، نيوجيرسي: بيرسون إديوكيشن، ص 40، ISBN 0-13-034074-Xتمت أرشفة هذا النص من النسخة الأصلية بتاريخ 2007-08-06
- ↑ "تعليمات RCA 501" (ملف PDF) . نظام معالجة البيانات الإلكترونية RCA 501 - دليل مرجعي للمبرمجين (ملف PDF) . شركة راديو أمريكا . 1958. ص 35. P501-2 . تاريخ الاسترجاع: 18 نوفمبر 2025 .
- ↑ "تعليمات RCA 301 - مقدمة" (ملف PDF) . نظام معالجة البيانات الإلكترونية RCA 301 - دليل مرجعي للمبرمجين (ملف PDF) . شركة راديو أمريكا . يناير 1962. الصفحات 33-44 . 93-17-000 . تاريخ الاسترجاع: 18 نوفمبر 2025 .
- ↑ ويرماوث، جيف. "قائمة تجميعية لذاكرة القراءة فقط لجهاز سينكلير ZX80" . مؤرشف من الأصل في 15 أغسطس 2015.
- ↑ أليسون، دينيس. "ملاحظات تصميمية لـ Tiny BASIC" . مؤرشف من الأصل بتاريخ 2017-04-10.
- ↑ تشارلز كراولي. "هياكل البيانات لتسلسلات النصوص" مؤرشف بتاريخ 4 مارس 2016 في أرشيف الإنترنت . قسم "المقدمة" مؤرشف بتاريخ 4 أبريل 2016 في أرشيف الإنترنت .
- ↑ "strlcpy و strlcat - نسخ ودمج السلاسل النصية بشكل متسق وآمن." مؤرشف بتاريخ 13 مارس 2016 في Wayback Machine
- ↑ "مقالٌ ساخرٌ حول strcpy وstrncpy وstrlcpy." مؤرشف بتاريخ 29 فبراير 2016 في أرشيف الإنترنت (Wayback Machine).
- ↑ كيث طومسون. "لا، دالة strncpy() ليست نسخة "أكثر أمانًا" من دالة strcpy()". 2012.
- ↑ "نادي براغ لعلم الأوتار" . stringology.org . مؤرشف من الأصل في 1 يونيو 2015. تم الاطلاع عليه في 23 مايو 2015 .
- ↑ إيفارتس، هولي (18 مارس 2021). "العميد السابق تسفي جليل يُصنَّف ضمن أفضل 10 علماء حاسوب مؤثرين في العقد الماضي" . كلية الهندسة بجامعة كولومبيا .
وقد ابتكر مصطلح "علم السلاسل"، وهو فرع من فروع خوارزميات السلاسل.
- ↑ كروشيمور، ماكسيم (2002). جواهر علم الأوتار . سنغافورة. ص. 5. ISBN 981-02-4782-6
يُعد مصطلح "علم السلاسل" لقبًا شائعًا لخوارزميات السلاسل وكذلك لخوارزميات النصوص
.{{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط ) - ↑ "أساسيات لغة بيرل" . مؤرشف من الأصل بتاريخ 21-04-2012.
تكمن أبرز نقاط قوة لغة بيرل في معالجة السلاسل النصية باستخدام التعابير النمطية.
- ↑ "تعليمات السلاسل x86" . مؤرشف من الأصل بتاريخ 27-03-2015.
- ↑ فليتشر، بيتر؛ هويل، هيوز؛ باتي، سي. واين (1991). أسس الرياضيات المتقطعة . PWS-Kent. ص 114. ISBN 0-53492-373-9
ليكن Σ أبجدية.
الكلمةغير الفارغة على Σ
هي متتالية منتهية مجالها
I
n
(لبعض
n
∈ ℕ) ومجالها المقابل Σ.
- ↑ شوينفيلد، جوزيف ر. (2010) [1967]. المنطق الرياضي (طبعة مُعاد طباعتها ). مطبعة سي آر سي. ص 2. ISBN 978-156881135-2.
أي تسلسل محدود من رموز لغة ما يسمى تعبيرًا عن تلك اللغة.
- 1 2 باربرا هـ. بارتي؛ أليس تير مولين ؛ روبرت إي. وول (1990). الأساليب الرياضية في اللغويات . كلوير.
- ↑ جون إي. هوبكروفت، جيفري د. أولمان (1979). مقدمة في نظرية الأوتوماتا واللغات والحوسبة . أديسون-ويسلي. ISBN 0-201-02988-X.هنا: القسم 1.1، الصفحة 1
- السلاسل النصية (علوم الحاسوب)
- ترميز الأحرف
- أنواع البيانات
- اللغات الرسمية
- التوافقية في الكلمات
- الأنواع الأولية
- الكيانات التركيبية
- خوارزميات على السلاسل النصية
