أهلا ومرحبا. في هذه المحاضرة ، سأقدم عرضًا
توضيحيًا لحل التحدي السابق.
سأستعرض كيف يمكننا عكس الأحرف
في سلسلة باستخدام دالة طول str وأيضًا
استعراض سلاسل الفرز باستخدام مقارنة str
ونسخة str بالإضافة إلى استخدام خوارزمية
الفقاعة.
دعنا نطرح كتل التعليمات البرمجية.
وسأقوم فقط بإنشاء برنامج واحد لهذا الغرض. لقد ذكرت في التحدي أنك
قمت بإنشاء برنامجين.
ولكن من أجل البساطة والتوضيح ، سأقوم فقط بإنشاء واحدة.
قم بإنشاء مشروع
، سأقوم فقط بتسمية وظائف السلسلة
أو بعض الاختلافات في ذلك.
دعنا نسميها مثال دوال السلسلة
الشائعة.
فلنبدأ بالعكس. يمكن أن يستمر العكس في وظيفته الخاصة
أو يمكننا وضعه في المقام الأول. كنت سأضعها في الأساس.
لذا فإن أول شيء أريد القيام به هو أنني سأقوم بإنشاء - حسنًا ، أول شيء أريد القيام
به في الواقع هو أنني أريد تضمين ملف الرأس الصحيح حتى أتمكن من استخدام وظائف السلسلة
هذه ، وهي سلسلة التضمين الخاصة بي. ح.
هذا هو المكان الذي يحتوي فيه على جميع وظائف السلسلة اللطيفة.
الآن سأقوم بإنشاء مجموعة أحرف. سأجعله بحجم 100.
إنه تعسفي فقط ، لن يكون
قادرًا على تخزين أشياء أكبر من 100.
سأقوم بإنشاء متغيرين محليين يساعدانني
في التحليل. وما أريد فعله هو أن أعرض بعض
المخرجات أولاً للمستخدم.
لذلك سأقول موجزًا عن سطرين
، وأطبع أحرفًا فردية
ومنفردة من السلسلة وترتيب عكسي.
سيخبر ذلك المستخدم بما يحدث ثم يطبع أيضًا فقط لجعله
أكثر وضوحًا ، ما عليك سوى طباعة شيء
من هذا القبيل ، بحيث يسهل قراءته.
سأقول إدخال السلسلة. سأقرأ في السلسلة.
ثم سأقوم بتخزين الخيط.
لذا سأقول scanf
، الحاضر s وسأقول str.
ولست مضطرًا إلى تمرير علامة العطف لقراءتها.
ثم سأحصل على طول الخيط. سأضع ذلك في المتغير المحلي الخاص بي.
لذا يمكنني استدعاء رابط str بمجرد قول str length في السلسلة
، ويعيد عدد الأحرف في تلك السلسلة. سهل جدا.
وبعد ذلك سأطبع شيئًا لأخبرهم أن الأحرف بترتيب عكسي.
لذا فإن أحرف السلسلة في شرطة
مائلة عكسية عكسية n.
ثم سأكتب حلقة for صغيرة لطيفة تمر عبر
صفيفتي ووفقًا للطول وتعكسها فقط.
لذلك سأقول لأني يساوي ل.
لذا سأعود للخلف في مصفوفة السلسلة
الفعلية. سأبدأ في النهاية وأمضي قدمًا.
ونقول إنني أكبر من أو يساوي
0 وأنا ناقص ناقص. وأنت تلاحظ أنني لست مضطرًا للنظر في أي أحرف
إنهاء فارغة عندما أفعل ذلك بهذه الطريقة.
ثم سأقوم بطباعة كل شخصية كما أواجهها.
لطباعة شخصية ونراكم فقط قم بعمل النسبة المئوية ج.
وفقط افعل ذلك وقل str sub-I.
وهذا هو في الأساس.
وبعد ذلك سأقوم بطباعة سطر جديد.
وفي الواقع سأطبع مجموعة من الأشياء فقط لإنهائها ، مجموعة
من الشرطات.
دعنا نرى ما إذا كان هذا يعمل ، من السهل جدًا أن يكون هذا في الواقع
كما ينبغي ، لا ينبغي أن يكون الحصول على الطول صعبًا.
ونسيت خط التغذية ، لذلك دعونا نصلح ذلك.
لذلك هنا تقول طباعة الأحرف الفردية للسلسلة عكسيًا أو أدخل السلسلة.
الآن scanf ، سيقرأ فقط في. لذا إذا دخلت جيسون فضاء فيدين.
سوف يقوم سكانف بقراءة ما يصل إلى جايسون والفضاء فقط.
قد ترغب في استخدام وظيفة أخرى مثل f get s إذا كنت ترغب في قراءة كل شيء.
لذا فإن ما سيفعله هذا هو فقط عكس جيسون لطباعة nosaj
، وهو ما يفعله. أحرف عكس السلسلة هي nosaj.
هذه وظيفة أو تنفيذ بسيط جدًا ، وليس معقدًا
للغاية.
لنجربها الآن بفرز سلسلة.
والآن سأفعل شيئًا ما. وسأفعل ذلك بشكل رئيسي على ما أعتقد فقط في الوقت الحالي.
يجب أن أضعها في وظائف فعلية ، لكننا لا نعرض الوظائف
في هذه المحاضرة ، نحن نعرض السلاسل.
لذلك دعونا ننشئ متغيرين محليين آخرين سنحتاجهما.
بشكل أساسي ، سنقوم بإنشاء اسم.
وفي هذه الحالة ، كنت سأقوم
بإنشاء مجموعة من الأوتار. سننشئ مصفوفة من السلاسل ، وسنستخدم f get s.
سأقوم بإنشاء مجموعة من السلاسل. لذلك يبدو هذا مثل مصفوفة
ثنائية الأبعاد.
ما نفعله هنا هو إنشاء 25 سلسلة بحجم 50.
ثم سأقوم أيضًا بإنشاء واحد آخر من 25 فقط ، وسيحتوي
هذا على كل سلسلة.
ثم سأضيف متغيرين
آخرين. سأضيف n و a j.
وبعد أن نقوم بالعكس ، سأطبع.
هناك رسالة أخرى توضح ما
نقوم به وهي تقوم بفرز سلاسل
المصفوفة باستخدام فرز الفقاعة.
لن أشرح لك نوع الفقاعة. لأنه مرة أخرى ، هذه مجرد خوارزمية لا
علاقة لها بما نقوم به. حقًا ، إنها مجرد طريقة للفرز.
إنه أحد أسهل الأنواع في الواقع لأنك تقوم بالتبديل بشكل أساسي.
ولكن ما نريد القيام به هو أننا نريد أولاً معرفة عدد السلاسل التي سيتم إدخالها. لذلك سنقول printf
إدخال عدد من السلاسل
، ثم سنقول scanf.
يمكن استخدام Scanf هنا لأنه مجرد رقم.
سنقول النسبة المئوية d ، وسنخزنها في المتغير المحلي n.
مرة أخرى ، أعلم أنني لا أستخدم أسماء رائعة
هنا ، لكنني أعرض شيئًا ما. نظرًا لأنه هو ، علينا المرور في علامة العطف.
ثم سأطلب منهم الدخول في السلاسل.
سأقول هنا إدخال
السلسلة 1 2 أو
3 متبوعًا بسطر التغذية.
سيكون هذا هو الرقم الذي يتعين عليهم إدخاله.
سلسلة واحدة ، سلسلة اثنان أو سلسلة ثلاثة.
ثم سأحصل بالفعل على حلقة تمر وتحصل على المدخلات.
سأقول هنا لأنني يساوي 0 ، فأنا أقل
من يساوي n لعدد السلاسل التي يريدون إدخالها
وأنا زائد زائد أو زائد أنا.
هنا سأقرأ السلسلة ، وسأستخدم طريقة مختلفة للقراءة -
كنت أفكر في استخدام f get s ، حتى تتمكن
من إدخال سلسلة بها مسافات. لكن لا أعتقد أننا بحاجة.
نقوم بمسح f ، وسنقرأ
في scanf في مجموعة الأسماء الخاصة بنا.
تذكر ، لدينا اسم وهذه سلسلة من السلاسل تتكون أساسًا
من 25 حرفًا.
50 حرفًا و 25 كلمة.
لذا فإن الحد الأقصى لعدد الكلمات التي يمكنك إدخالها هو 25.
لذلك سنقوم بتخزين هذا في مصفوفة
الأسماء الخاصة بنا. لذلك سنقول فقط scanf.
سنقرأ في سلسلة ، وسنضعها في الاسم
الفرعي I.
ولذا قمنا بتخزين المصفوفات الخاصة بنا ، يمكننا فقط تخزين ما يصل إلى 25.
لقد انتهينا الآن من حلقتنا والآن يمكننا فقط كتابة نوع الفقاعة.
وبالتالي ، فإن نوع الفقاعة الخاص بنا ، لن أشرح لكم ، سأخبركم أنها
خوارزمية بسيطة جدًا لها حلقة داخلية.
إذن لديك حلقة for تمر عبرها ، فأنا يساوي 1 من خلال جميع
السلاسل.
ثم في الحلقة الداخلية الخاصة بك ، تنتقل من الصفر إلى
كل الأوتار ناقص واحد. وأنت تقارن تلك السلسلة الأولى بكل الأوتار الأخرى.
وأنت في الأساس تقوم بتفجيرهم. لكن المهم هنا
هو وظيفة str مقارنة.
اسمحوا لي فقط أن أحاول الحصول على هذه المسافة
البادئة بشكل صحيح في وظائف نسخة str ، هذا هو المهم حقًا.
ستلاحظ أنه ليس لدي أي أقواس نهائية لأي من الأربعة لأنها تحتوي
على عبارات فردية.
على الرغم من أن هذا يحتوي على شيء ما في جسده ، إلا أنه عبارة واحدة فقط.
لذا فإننا ننتقل من مقارنة كل كلمة بكل كلمة أخرى بشكل أساسي
بعد أن قارنا كلمة واحدة سابقًا.
لذلك نقول إذا كان str يقارن الاسم sub j والاسم
sub j sub one ، لذلك تأخذ str Compar
وسيطتين ، مصفوفتين من الأحرف
، ومؤشرات الأحرف حقًا.
وإذا كانت متساوية ، فإنها ستعيد صفرًا.
إذا كانت المعلمة الأولى أقل
من المعلمة الثانية ، فستُرجع
أقل من الصفر.
وإذا كانت المعلمة الأولى أكبر من المعلمة
الثانية ، فإنها سترجع أكبر من صفر ، واحد.
إذن ما يقوله هذا هو أنه إذا كانت السلسلة الأولى أكبر من السلسلة الثانية
، فنحن نريد تبديل كل شيء. ولهذا السبب لدينا هذه الدرجة.
يقوم Temp بالفعل بتخزين سلسلة مؤقتة مؤقتة.
لذلك أدخلنا الاسم المؤقت sub j ثم
استبدلنا الاسم sub j بأسماء j زائد واحد.
هذه هي الطريقة التي يعمل بها نوع الفقاعة. مرة أخرى ، ما هو مهم هنا هو مقارنة str و نسخ str.
وإذا كنت بأمان ، فأنت تريد استخدام strn Compar.
وعندما تفعل سترن مقارنة. حسنًا ، في الواقع سترن للمقارنة
، فأنت لا تهتم لأن هذا فقط إذا كنت تريد مقارنة البادئة.
بالنسبة لنسخ str ، فأنت تريد بالفعل استخدام نسخة strn.
وهذه المعلمة الثالثة هي ما هو مهم.
لذا ، فأنت تريد فقط التأكد من عدم النسخ بأكثر من حجم درجة الحرارة ،
مطروحًا منه واحدًا لأنه بخلاف ذلك يكون لديك تجاوز سعة المخزن المؤقت.
لذلك يمكنك استخدام كل هذه الأشياء ، يمكنك أيضًا استخدام
- إذا لم يكن مخزنًا مؤقتًا للحروف ، فربما تريد استخدام
طول str إذا كان مؤشرًا. لكن حجم سوف يعمل بشكل جيد لهذا الغرض.
ومرة أخرى ، سيؤدي هذا إلى القضاء على أي تجاوزات في المخزن المؤقت.
لذلك من الأفضل دائمًا استخدام نسخة strn وواحدة
لأن لدينا فاصل فارغ يجب أن يذهب في النهاية.
لذا فهنا مجرد وجهة مصدر لنسخة strn.
نحن ننسخ الاسم sub j إلى temp ونفس الشيء مع أسماء
j plus one واسم sub j. ثم أخيرًا ، مؤقتًا إلى الأسماء الفرعية
j زائد واحد. وأنا في الواقع يجب أن
أقوم بتحديث هذه المتغيرات لأنها خاطئة
لأنها يجب أن تكون المصدر دائمًا. لذا اسم هنا الاسم الفرعي j.
ثم آخرها سيكون j زائد
واحد ، j زائد واحد.
إذاً فهذه نسخة strn و str قارن ، وظائف سهلة الاستخدام للغاية.
بعد أن قمنا بفرزها ، نريد فقط طباعتها.
لذلك نريد أن نقول أن السلاسل تظهر بعد الفرز
، نضعها في سطر
التغذية ثم نمر عبر حلقة لطباعة جميع السلاسل
في المصفوفة الخاصة بنا.
لذلك نقول 4 أنا يساوي 0.
أنا أصغر من أو يساوي n لأن n يمثل عدد السلاسل
التي قمنا بفرزها وإدخالها.
ثم نريد فقط المرور بسلسلة المصفوفات الوترية.
لذلك نريد أن نقول تغذية سطر
printf s واسمًا فرعيًا.
لذا فإن الاسم الفرعي I هو في الواقع مصفوفة مرتبة ، ولهذا السبب كان
لدينا أسماء فرعية I.
على الرغم من عدم وجود الرمز الثاني لأن هذا يمثل حجم كل حرف.
25 كلمة من 50 كحد أقصى.
لذلك دعونا نرى ما إذا كان هذا يعمل.
أنشئه ، وتلقيت رسالتين لأنني لا أعرف كيف أتهجى.
وإذا قمنا بتشغيل هذا. سنقوم أولاً بتشغيل الوظيفة العكسية حتى تتمكن من
رؤية ذلك مرة أخرى لأننا قمنا بتضمينه في نفس البرنامج.
قل فيدين و IDF هذا جيد.
أدخل عدد السلاسل التي نريد فرزها. دعنا نقول خمسة
، دعنا نقول zzzz فقط لذلك هو واضح ، شيء من هذا القبيل.
لقد أخطأت قليلاً هناك ، لكن يبدو أنها قامت بفرزها ، a b d f r z.
لذلك فهو يعمل. لدي خطأ واحد على الرغم
من أن سلسلة الإدخال في المائة د.
أدخلت عدد السلاسل في n ثم أقول أقل من يساوي
، يجب أن أقول أقل من.
لذلك دعونا نجريها مرة أخرى فقط لتوضيحها ، لكن يجب أن أقوم ببنائها.
لا تنسى أن تبني بعد أن تغير الأشياء.
مرة أخرى ، سنقول أي شيء هنا ثم السلاسل
الرقمية. لنقم فقط
بأربعة.
ثم يرتبونها أبجديًا ويقولون d e l z ، لذا يبدو جيدًا.
لذلك يمكنك بالتأكيد تحسين هذا الرمز حيث قد ترغب في وضع كل
شيء في وظائف ، وجعله أكثر نمطية. ولكن ما أحاول إنجازه بهذه المهمة هو
كيفية استخدامك لمقارنة str ، وكيف تستخدم نسخة strn وكيف يمكنك
استخدام طول str.
يجب عليك أيضًا اللعب مع str cat و strn cat وهذه
هي الوظيفة المشتركة الحقيقية الأخرى.
قد ترغب في اللعب مع strstr ، strchar للبحث. هذه هي حقًا جيدة حقًا
أو هي ، الأعلى ، أقل للتحقق من الأحرف ، أو وظائف
التحويل atoi nad.
شكرًا لك. اتمنى ان يكون ذلك مفيدا.