أهلا ومرحبا بكم مرة أخرى. في هذه المحاضرة
، أريد أن أتحدث عن إنشاء سلسلة ، وتحديدًا كيف
يمكنك القيام بذلك في c باستخدام مصفوفة الأحرف.
أميل إلى استخدام المصطلحين "سلسلة" و "سلاسل الأحرف" بالتبادل.
لكن في الحقيقة سلسلة الأحرف هي مصفوفة char التي سنتحدث عنها.
إنه مفهوم مهم للغاية.
سنكون قادرين الآن على استخدام الكلمات والنصوص في برنامجنا للقيام بكل أنواع الأشياء.
الآن c نفسها ليس لديها أي نوع بيانات يمثل سلسلة.
لا يوجد شيء هناك. تدعم العديد من اللغات
كائنًا أو نوع بيانات من نوع سلسلة.
الآن نظرًا لعدم وجود نوع بيانات c في السلسلة ، لا يمكنك استخدام
أي من العوامل الموجودة في السلسلة.
إذن ما سنفعله في النهاية هو أننا سننتهي باستخدام المكتبة القياسية وهناك كل أنواع
وظائف السلسلة التي سنتحدث عنها.
لدينا ثلاث محاضرات مخصصة لوظائف السلسلة المختلفة التي يمكنك توظيفها.
وسيساعدنا هذا في معالجة السلاسل والحصول على معلومات حول السلاسل.
لكن لا يمكنك استخدام عوامل تشغيل على السلاسل ، بدون سلاسل
زائد أو ناقص ، ولا شيء من هذا القبيل.
يتم تخزين السلاسل الموجودة في c في مصفوفة من نوع char.
نحن نعلم ما هي المصفوفة. نحن نعلم ما هو حرف الحرف.
نوع char هو حرف واحد ، مصفوفة يمكنك فقط تخزين
عناصر متعددة بنفس الاسم.
لذلك من المنطقي أن تكون السلسلة داخل مصفوفة الأحرف لأن
السلسلة تتكون من العديد من الأحرف.
لذلك يتم تخزين أحرف سلسلة في خلايا الذاكرة المجاورة ، حرف واحد لكل خلية.
يمكنك الوصول إليه تمامًا كما لو كنت تصل إلى مصفوفة أيضًا.
لكن كيف يمكنك بالفعل تعريف سلسلة وترى أنك ستستخدم ببساطة نوع الحرف ثم الأقواس
للإشارة إلى الحجم ، تمامًا مثل المصفوفة العادية إذا كنت تريد
إنشاءها من نوع مختلف.
Char ثم أيًا كان اسمك ثم حجم مصفوفة الأحرف
داخل أقواس مربعة.
هذه هي الطريقة التي يمكنك من خلالها التصريح عن سلسلة في c.
الآن عندما تعلن عن السلسلة في c مثل هذا ، لا توجد
بيانات فعلية مرتبطة بها. أنت فقط تحدد الحجم.
هذا هو أبسط طريقة.
لذلك يمكن أن يستوعب المتغير سلسلة تحتوي على ما يصل إلى 19 حرفًا.
تذكر هذا الحرف الفارغ.
إذا قلت أن حجم السلسلة سيكون 20 ، فهذا يعني أنه يمكن تخزين
19 حرفًا فقط لأنه يجب أن يكون
لديك حرف إضافي واحد للصفر.
ضع في اعتبارك أن الإعلان عن أن مجموعة الأحرف هي 20 يعني
أنه يمكن تخزين 19 حرفًا هناك.
عندما تحدد أبعاد المصفوفة التي تنوي استخدامها قبل سلسلة - لتخزين
سلسلة ، يجب أن تكون واحدة
على الأقل أكبر من عدد الأحرف في السلسلة التي تريد تخزينها.
سيقوم المترجم تلقائيًا بإضافة حرف النهاية الصفري إلى نهاية كل سلسلة ثابتة.
لذا ما يجب عليك فعله حقًا هو عند إنشاء سلاسل
الأحرف هذه ، يجب أن تقوم بتهيئتها.
لذا يمكنك تهيئة متغير سلسلة مثلما يمكنك تهيئة مصفوفة.
يمكنك وضع كل حرف داخل هذه الأقواس.
لذلك يبدو هذا مشابهًا جدًا إذا كنت تريد تهيئة العناصر في مصفوفة عدد صحيح.
ولكن إذا قلت كلمة حرف ثم داخل الأقواس
المتعرجة ، فإنك تضع كل حرف منفردًا من شأنه
إنشاء مصفوفة أحرف.
لذلك فهي نفس تهيئة أي مصفوفة أخرى.
في حالة عدم وضع الحجم ، يحسب مترجم
c تلقائيًا عدد العناصر في المصفوفة ثم يضيف عنصرًا للفاصل الصفري.
لذا فهو يعتمد على عدد المُبدِلات الموجودة بين الأقواس ، الأقواس
المتعرجة.
ستحتفظ هذه العبارة بالمساحة والذاكرة لسبعة أحرف بالضبط
، وعلامة تعجب h-e-l-l-o ثم علامة
النهاية الصفرية ، وهذا الرسم التخطيطي الصغير على اليمين يوضح لك ذلك.
تلقائيًا وإضافة هذا الفاصل الفارغ. الآن سيكون الأمر مؤلمًا
حقًا إذا كان عليك دائمًا تهيئة مصفوفات
شخصيتك بعلامات اقتباس مفردة متبوعة بفواصل.
لذا ما يمكنك فعله هو حتى التدوين المختصر هو أنه يمكنك فقط وضع علامات اقتباس مزدوجة حول ذلك.
لذلك يمكنك إما تحديد السلسلة بشكل صريح ، كما في المثال الأول
، ثم يتعين عليك بالفعل استخدام دالة سلسلة فقط لتطبيق
البيانات عليها أو يمكنك السماح
للمترجم بتنفيذ ذلك نيابة عنك.
تكمن مشكلة القيام بذلك صراحةً في أنه عليك دائمًا أن تتذكر إضافة هذا الحرف الإضافي
للقيمة الخالية.
لذا ما يجب عليك فعله حقًا هو أن تترك المترجم يكتشف ذلك من أجلك.
لذلك لا تضع أي أرقام داخل هذه الأقواس للمقاس.
لأنه إذا كان الحجم المحدد صغيرًا جدًا ، فلن يتمكن المترجم
من احتواء الحرف الفارغ المنتهي في نهاية المصفوفة ولا يضع واحدًا
هناك ولن يخبرك أنه لم يضع واحدًا هناك.
لذلك سيكون لديك خطأ في برنامجك لن تعرفه حتى.
أفضل ممارسة هي استخدام سلسلة حرفية وتهيئة
سلسلة للسماح للمترجم بتحديد الحجم نيابةً عنك.
اجعله بحجم أكبر أو شيء ما ثم ضعه هناك وسيحدد الحجم المناسب لك.
لذلك لا تحدد الحجم. دع المترجم يكتشف ذلك.
بهذه الطريقة يمكنك التأكد من أنها ستكون صحيحة.
ما عليك سوى ترك هذه الأقواس كأقواس فارغة
وتعيينها مع عامل الإسناد ثم داخل علامات الاقتباس
المزدوجة يمكنك وضعها فقط. لا تحتاج حتى إلى الأقواس المربعة.
هذه هي أفضل ممارسة. سنذهب من خلال مثال.
يمكنك أيضًا تهيئة جزء فقط من مصفوفة
عناصر من نوع char بسلسلة.
لذا إذا أنشأت حجمًا كبيرًا حقًا وقمت بتعيين
حرفين فقط ، فلا بأس بذلك أيضًا ، فأنت
تقوم فقط بتهيئة بعض الأحرف. جميع الشخصيات الأخرى
ستكون فارغة.
إذن ما سيحدث هنا هو أن المترجم سوف يهيئ العناصر الخمسة الأولى.
من الصفر إلى str أربعة ، ستحتوي
جميع أحرف ثابت السلسلة ثم السلسلة الفرعية 5
على الحرف الفارغ.
لا يزال سيتم تخصيص مساحة لجميع العناصر الأربعين في
المصفوفة ولكن سيتم استخدام خمسة منها فقط ، أربعة بالإضافة إلى الحرف الفارغ.
لذا مرة أخرى ، فإن أفضل ممارساتك لا تحدد فعليًا رقمًا داخل الحجم ، فقط قم بتعيين
سلسلة حرفية لها باستخدام علامات الاقتباس المزدوجة.
هذا ما ستراه في النهاية.
الآن إذا لم تقم بالتهيئة وقمت للتو بإنشاء مصفوفة
الأحرف بالحجم ، فكيف تضع التاريخ فيه.
حسنًا ، نظرًا لأنها مصفوفة لا يمكنك تعيين البيانات فقط.
نعلم أنه إذا كان لدينا مصفوفة عدد صحيح ، فلا يمكننا
فقط تعيين العدد خمسة لمصفوفة عدد صحيح ،
فهذا غير منطقي. عليك تحديد العناصر الفعلية.
عليك تحديد المؤشرات.
لذلك لا يمكنك فعل شيء مثل إعلان مصفوفة أحرف مكونة من 100 حرف ثم
قول s يساوي مرحبًا. هذا لن يعمل.
لأن ، مرة أخرى ، هي مصفوفة. على الرغم من أنها سلسلة داخل علامات الاقتباس المزدوجة ، إلا أنها لا تزال مصفوفة في الذاكرة.
لذلك إذا كنت تقوم بإجراء عملية إسناد ، فلا يمكنك تعيين مجموعة واحدة
من الأحرف إلى مجموعة أخرى من الأحرف مثل المذكورة أعلاه.
إذا كنت ترغب في تعيين البيانات إلى مصفوفة
أحرف بعد أن قمت بتعريفها وبعد أن قمت بتهيئتها ، يجب عليك استخدام
وظيفة خاصة تسمى str copy.
وسوف نتحدث عن ذلك في محاضرة أخرى.
لذا حتى هذه النقطة ، عندما تقوم بإنشاء السلاسل الخاصة بك ، ستكون سلسلة حرفية
، ستكون داخل علامات اقتباس مزدوجة ، ولن تقوم بتعديلها أبدًا.
لذلك هذا صحيح تمامًا أيضًا. يمكنك بالفعل الوصول إلى هذه الأحرف
أو كل عنصر في المصفوفة بواسطة الفهرس وتحديد كل حرف.
لذا ، s sub 0 ، s sub 1 ثم ضع حرفًا واحدًا في علامتي اقتباس مفردة.
يمكنك تعيينها بهذه الطريقة. لكن تخيل لو كان لديك سلسلة حجمها 100 بايت.
سيستغرق هذا الكثير من أسطر التعليمات البرمجية. لذلك أنت لا تريد أن تفعل ذلك.
ما تريد القيام به هو تهيئته عندما تعلنه
بدون حجم ثم تحديد ما إذا كنت تريد تعديله
في أي وقت تريد نسخه.
بقدر ما يتم عرض سلسلة كإخراج ، ما زلنا سنستخدم وظيفة printf هذه.
عندما تريد الإشارة إلى سلسلة في أي مكان في برنامجك ، ما عليك سوى استخدام
اسم المصفوفة في حد ذاته.
ليس عليك تحديد المؤشرات.
لأن المؤشرات داخل المصفوفة ستحدد حرفًا واحدًا.
إذا كنت تريد السلسلة بأكملها ، فما عليك سوى استخدام اسم المصفوفة.
لذلك إذا كنت تستخدم وظيفة printf لعرض الإخراج
، فستقوم فقط بما يلي. داخل علامات الاقتباس المزدوجة
، يمكنك استخدام النسبة المئوية كمحدد التنسيق الخاص بك ثم اسم صفيف الأحرف فقط.
لذلك لا تعامله مثل المصفوفات الأخرى عندما تريد الوصول إليه. عندما تريد الوصول إليه فقط الاسم لا
توجد مؤشرات أو أقواس فعلية.
والنسبة المئوية كمحدد تنسيق لإخراج
سلسلة منتهية خالية. تذكر قبل استخدام النسبة المئوية d للأعداد
الصحيحة ، يمكنك استخدام النسبة المئوية c للأحرف.
بالنسبة إلى السلاسل ، يمكنك استخدام النسبة المئوية ، وتلك هي مصفوفات الأحرف.
تتوقع بعض سلسلة منتهية فارغة.
ومع ذلك ، فإنك تقوم بتهيئة السلسلة إذا قمت بذلك بدون حجم وتتم إضافة
حرف النهاية الفارغ تلقائيًا
أو إذا قمت بإنشائه بحجم معين وقمت بإضافته أو إذا أضفته
بشكل صريح ، فلا يهم. يجب فقط أن يتم إنهاؤها لاغية.
تفترض وظيفة printf أن الشخص يواجه محدد تنسيق النسبة المئوية s
بأن الوسيطة المقابلة عبارة عن سلسلة أحرف يتم إنهاؤها بحرف فارغ.
هذا ما تتوقعه ، لذلك يجب أن يكون على هذا النحو.
لإدخال سلسلة ، نعرف كيفية إدخال مجموعات أخرى من
البيانات عبر لوحة المفاتيح باستخدام scanf.
سنفعل الشيء نفسه لإدخال السلاسل.
سنستخدم وظيفة scanf. باستخدام وظيفة scanf ، ستكون
بنفس الطريقة باستثناء أنك ستستخدم محدد تنسيق مختلف.
لذلك بالنسبة للسلاسل ، ستستخدم النسبة المئوية كمدخلات.
ويستخدم هذا لإدخال سلسلة.
الشيء الآخر الذي يجب ملاحظته هنا هو عدم وجود علامة عطف
لاسم المتغير لأنه حرف. تذكر ، لقد ذكرنا أنه يجب عليك فقط تقديم
علامة العطف وعنوان المشغل على السلاسل.
والسبب هو أنه عندما نتحدث عن المؤشرات سيكون الأمر أكثر وضوحًا.
لكن إدخال char على الرغم من أنه مصفوفة
أحرف هو مؤشر ، بينما يأخذ scanf كمعامل ثانٍ مؤشرًا.
ولهذا السبب لا يتعين عليك القيام بذلك. عندما تعلن عن الأعداد الصحيحة والمضاعفات ، فهذه
ليست مؤشرات و. لذلك إذا كنت تريد
قراءة المدخلات من لوحة المفاتيح باستخدام scanf ، فإن الوسيطة الثانية تتوقع مؤشرًا
عليك تمريره في العنوان.
الآن مع scanf عندما تقوم بعمل سلسلة
، فإن scanf سوف يقرأ فقط حتى الفراغ.
لذلك إذا قمت بإجراء مسح ضوئي وكتبت في
Jason فهو معلم.
الشيء الوحيد الذي سيتم تخزينه في المدخلات هو جايسون. لأنه بمجرد وصولها إلى تلك
المساحة ، لن تقرأ بقية السلسلة.
إذن ، هناك وظائف أخرى يمكنك استخدامها لقراءة السلسلة بأكملها.
بعض الأمثلة التي سنستخدمها ستفعل ذلك على الأرجح. يمكنك القيام بأشياء مثل f get s ، وهي
طريقة أخرى لقراءة المدخلات من لوحة المفاتيح والتي ستقرأ السلسلة بأكملها
بغض النظر عن المسافات.
ولكن هناك شيء آخر أعتقد أنه يسمى الحصول
على شرطة سفلية لـ C11 ، لكننا سنتحدث
عن ذلك أكثر ، ولكن هذا مجرد شيء واحد يجب تذكره عند
قراءة مدخلات السلاسل. سوف تقرأ فقط على طول الطريق حتى الفضاء.
ماذا عن اختبار ما إذا كانت سلسلتان متساويتان.
حسنًا ، حتى هذه النقطة ، اختبرنا جميع المتغيرات
لنرى ما إذا كانت متساوية ، نستخدم فقط يساوي.
لكن مع الأوتار ، هذا لن ينجح.
عامل المساواة ، تذكر ، قلنا أن السلاسل عبارة عن مصفوفات أحرف ، لذا لا يمكنك استخدام عوامل التشغيل عليها.
ولا يمكن تطبيق عامل المساواة إلا على ints و double
أو floats أو الأحرف.
لا يعمل على الهياكل أو المصفوفات. لا يمكنك مقارنة مصفوفتين.
لذلك لن يعمل مع الأوتار. إذا كنت تريد تحديد ما إذا كانت السلسلتان متساويتين
، فعليك صراحة مقارنة السلاسل المكونة من حرفين حرفًا بحرف.
لذلك عليك أن تنظر إلى كل عنصر في فهرس المصفوفة
بالفهرس.
ومع ذلك ، فهذه مشكلة كبيرة حقًا لأن ذلك سيكون مملاً حقًا.
لذلك سوف نتحدث عن كيفية القيام بذلك بسهولة
باستخدام دالة مقارنة str من المكتبة القياسية ، لكن
لا يمكنك استخدام يساوي يساوي تذكر ذلك.
ومرة أخرى ، للتذكير ، قلت ذلك عدة مرات أريد أن أقولها مرة أخرى ، ثابت
السلسلة x داخل علامات الاقتباس المزدوجة
ليس هو نفسه ثابت الحرف x داخل علامات الاقتباس الفردية.
X داخل علامات الاقتباس المفردة هو نوع أساسي ، إنه مجرد حرف
أو رعاية.
X داخل علامات الاقتباس المزدوجة هو نوع محرك الأقراص ، وهو مصفوفة من نوع char.
يتكون X داخل علامات الاقتباس المزدوجة حقًا من حرفين ، الحرف
x والفاصل الصفري ، الحرف الفارغ ، لذا ضع ذلك في الاعتبار.
فيما يلي مثال على
كيفية إنشاء سلاسل نصية إما بإعلانها
بحجم أو تهيئتها على نفس السطر.
الآن هذا هو أفضل ممارسة. إذا كنت ستستخدم سلسلة حرفية ، فإن
ما سأفعله هو أنني سأفعل
ما تقوله هنا ، وأنشئ مصفوفة الأحرف ، ولا تحدد حجمًا ، ثم
على يمين عامل الإسناد ، يوجد علامات اقتباس مزدوجة.
سيقوم المترجم تلقائيًا بإنشاء السلسلة الصحيحة وإضافة فاصل فارغ إليها.
إذا حددت حجمًا ولم يكن لديك عدد كافٍ من الأحرف ، فلن يتم تخزينه.
لذلك فقط قم بإنشاء سلسلة أحرف حرفية
باستخدام نوع بيانات char ، واسم
المتغير ثم الأقواس الفارغة.
أعتقد أن هذا البرنامج سيحسب الأحرف في مصفوفة
، لذلك سيحصل أساسًا على طول السلسلة.
ما نقوم به هنا هو إنشاء متغير باسم count في مصفوفتين من الأحرف
مع سلسلتين مختلفتين ، ليكون أو لا يكون ،
ثم الفاصلة هذا هو السؤال.
سيكون لدى Char str one مولد بديل لما بعد b ،
وسيكون لدى str بديل بعد سؤال.
إذن لدينا حلقة هنا ستمر خلال المصفوفة الأولى
، بدءًا من العد يساوي صفرًا حتى نرى فاصلًا فارغًا.
ويمكننا استخدام لا يساوي في هذه الحالة لأننا نقارن بين حرف.
فاصل فارغ كشخصية. من الجيد تمامًا مقارنة الشخصيات.
لذا فإن حلقة while سوف تستمر طوال الطريق حتى نرى فاصلًا فارغًا.
بمجرد أن نرى فاصلًا فارغًا ، سنقفز للخارج.
سيكون Count مساويًا لعدد الأحرف في تلك السلسلة.
إذن فهو طول هذا الخيط.
نحن نفعل ذلك لكلا الخيطين. وستلاحظ أن كلا الخيطين سيكون
له الطول الصحيح لأننا نمر بكل واحد فقط.
أن يكون b أو لا يكون b عبارة عن 18
حرفًا.
الآن لن تحتاج حقًا إلى فعل أي شيء كهذا لأن لدينا
وظيفة مساعدة لطيفة بطول str لإيجاد أطوال سلاسل.
لكن مرة أخرى ، ما يوضحه هذا هو حقيقة أنها مصفوفة.
وإذا كنت تريد مقارنة طول سلسلة أو إيجادها ، فيمكنك استخدام
لا يساوي وإلقاء نظرة على الحرف ، فاصل الصفر.
اتمنى ان يكون ذلك مفيدا. هذه هي الطريقة التي سنقوم بتعريف وتهيئة السلاسل الحرفية.
شكرًا لك.