Command Palette

Search for a command to run...

عكس سلسلة عبر الإنترنت: كيف تعمل هذه الأداة والرموز التعبيرية وكل شيء

عكس سلسلة عبر الإنترنت: كيف تعمل هذه الأداة والرموز التعبيرية وكل شيء

T
Toolz Team
|Jul 9, 2026|11 دقيقة قراءة

جزء من مجموعة أدوات النص

لقد قمت بشحن أداة عكس السلسلة على Toolz.dev معتقدًا أنها كانت الشيء الأكثر مللًا I&#39؛d build طوال الشهر. It&#39؛s split('').reverse().join(''). ما الذي يمكن أن يحدث بشكل خاطئ. ثم قمت بلصق نموذج النص I&#39؛d المكتوب - والذي، لأنني كنت أشعر باللطف، انتهى بـ &quot؛يونيكود: 你好世界 🌍🚀&quot؛ - وعاد الإخراج مع تحويل الرمزين الرمزيين إلى صناديق مشوهة. 🌍🚀 أصبح \ude80🜍\ud83c. الحروف الصينية معكوسة تماما. تحطمت الرموز التعبيرية.

هذه المفاجأة التي تبلغ مدتها خمس دقائق هي في الواقع الشيء الأكثر فائدة الذي يمكنني تعليمه لك حول عكس الأوتار، لذلك تم بناء هذا الدليل بأكمله حولها. يبدو عكس النص تافهًا، وهو كذلك بالنسبة لـ ASCII العادي. اللحظة التي تقدم فيها الرموز التعبيرية أو الأعلام أو بعض الأحرف المميزة، &quot؛ عكس السلسلة والاقتباس؛ يتوقف عن الحصول على إجابة واحدة واضحة - ومعظم الأدوات، بما في ذلك هذه الإجابة، تختار بهدوء الإجابة التي تكسرها.

ال عكس السلسلة تقوم الأداة بشيء واحد: فهي تعكس الأحرف، على الفور، أثناء الكتابة. لا توجد أوضاع للتكوين، ولا يوجد تسجيل، ولا يغادر النص المتصفح أبدًا. اسمحوا لي أن أوضح لك بالضبط ما يفعله، وأين ينكسر، وكيفية عكس النص بشكل صحيح في الكود الحقيقي عندما يكون الكسر &#39؛t مقبول.

ليرة تركية؛DR: لصق النص في عكس السلسلة ويقلب ترتيب الشخصيات مباشرة - Hello يصبح olleH. It&#39؛s وضع عكس حرف واحد (لا توجد أوضاع منفصلة للكلمة أو السطر)، ويتم تحديثه تلقائيًا أثناء الكتابة، ويمكنك نسخ النتيجة أو تنزيلها. It&#39؛s مثالية لعمليات التحقق المتناظرة والألغاز السريعة والتحقق من إجابات المقابلة. تنبيه: مثل جافا سكريبت عادي split('')، فهو يكسر الرموز التعبيرية والأعلام لأنه ينقسم حسب وحدة التعليمات البرمجية. نص عادي وعكس CJK بشكل جيد. إقرانه مع محول الحالة أو عداد الكلمات للعمل النصي السريع.

ماذا تفعل أداة عكس السلسلة بالفعل؟

عملية واحدة بالضبط: تعكس ترتيب الأحرف. الحرف الأخير يصبح الأول، وهكذا.

الإدخال: Hello World إخراج: dlroW olleH

تحت الغطاء، المنطق هو حقًا سطر واحد - نفس السطر أنت &#39؛د اكتب في مقابلة مع جافا سكريبت:

text.split('').reverse().join('')

هناك&#39؛s لا &quot؛ الكلمات العكسية والاقتباس؛ أو &quot؛ الخطوط العكسية والاقتباس؛ الوضع مختبئ في القائمة. وصفت المسودات السابقة لهذه الصفحة أوضاع الأحرف والكلمات والجملة والسطر؛ كان ذلك طموحًا وليس حقيقيًا. تقوم الأداة بعكس الأحرف، نقطة كاملة. يتم تحديثه تلقائيًا أثناء الكتابة، بحيث ترى النتيجة المعكوسة مباشرة، ويمنحك عدد الأحرف والأسطر لكل من الإدخال والإخراج. يمكنك لصق النص، أو تحميل ملف نصي، أو التحميل من عنوان URL، ثم نسخ النتيجة أو تنزيلها كـ .txt.

إذا كنت تريد على وجه التحديد عكس ترتيب الكلمات (Hello WorldWorld Hello)، أنت &#39؛ افعل ذلك بالرمز باستخدام split(' ').reverse().join(' ')- أنا &#39؛ سأعرض المقتطفات أدناه.

لماذا تنكسر الرموز التعبيرية عند عكسها؟

هذا هو الجزء الذي يستحق الفهم، لأنه يفسر فئة كاملة من الأخطاء.

سلاسل JavaScript هي تسلسلات من UTF-16 وحدات الكود، لا &quot؛ الأحرف والاقتباس؛ بالمعنى الإنساني. معظم الأحرف اليومية - الحروف الإنجليزية والأرقام وعلامات الترقيم وحتى الأحرف الصينية واليابانية والكورية - تتناسب مع وحدة تعليمات برمجية واحدة مكونة من 16 بت. لذا split('') القطع بينهما بشكل نظيف وعكس الأعمال:

'你好世界'.split('').reverse().join('')  // → '界世好你'  ✅

لكن الرموز التعبيرية وتسلسلات العلم وبعض الرموز حية خارج يتم تخزين هذا النطاق كـ أزواج بديلة- وحدتان رمزيتان تعنيان شيئًا معًا فقط. split('') يقطعها بسعادة إلى نصفين، والعكس يخلط النصفين إلى هراء

'AB🌍🚀'.split('').reverse().join('')  // → mojibake, the emoji shatter ❌

الجمع بين العلامات هو الفخ الآخر. يمكن تخزين الحرف المميز بطريقتين: كنقطة رمز واحدة مركبة مسبقًا (é)، أو كحرف أساسي بالإضافة إلى لهجة مجمعة منفصلة (e + ◌\). النسخة المركبة مسبقًا تنعكس بشكل جيد. تقوم النسخة المتحللة بفصل اللكنة، التي تطفو وتهبط على الحرف الخطأ بعد الانعكاس.

إذن القاعدة الصادقة لهذه الأداة: النص العادي والأرقام وعلامات الترقيم وCJK تنعكس بشكل صحيح؛ سوف تنكسر الرموز التعبيرية والرموز التعبيرية للعلم واللهجات المتحللة. That&#39؛s ليس عيبًا فريدًا في Toolz.dev - it&#39؛s ماذا split('') يفعل في كل مكان، والكثير من &quot؛ سلسلة عكسية واقتباس؛ المواقع تتصرف بشكل مماثل. لقد تركت النسخة الساذجة في مكانها عمدًا لأنها &#39؛ سريعة وشفافة وتتطابق مع ما يعنيه معظم الناس عندما يقولون &quot؛ عكس هذا، والاقتباس؛ لكنك تستحق أن تعرف الحافة.

كيف يمكنك عكس سلسلة بشكل صحيح في التعليمات البرمجية؟

إذا كنت أنت و#39؛ نكتب تعليمات برمجية حقيقية ويهم Unicode، فهنا&#39؛السلم من الساذج إلى الصحيح.

المستوى 1 - ساذج (ماذا تفعل الأداة): فواصل الرموز التعبيرية.

str.split('').reverse().join('')

المستوى 2 - عامل الانتشار: يتكرر حسب الكود نقطة، لذلك فهو يحافظ على معظم الرموز التعبيرية سليمة (تبقى الأزواج البديلة معًا). لا يزال يكسر العلامات المجمعة المتحللة وتسلسلات الرموز التعبيرية المتعددة مثل الأعلام.

[...str].reverse().join('')

المستوى 3 - إدراك الحرف: تعامل مع كل &quot؛ الشخصية والحاصل المدرك من قبل المستخدم؛ باعتبارها الذرية. هذا هو النهج الصحيح حقا.

const seg = new Intl.Segmenter('en', { granularity: 'grapheme' });
[...seg.segment(str)].map(s => s.segment).reverse().join('');

Intl.Segmenter يتعامل مع الرموز التعبيرية والأعلام ومعدلات لون البشرة ودمج العلامات بشكل صحيح. It&#39؛s الإصدار I&#39؛d يتم شحنه في الإنتاج إذا كان عكس نص المستخدم باستخدام الرموز التعبيرية مطلبًا حقيقيًا.

هنا #39؛ نفس العملية عبر اللغات، لممارسة المقابلة والمرجع:

# Python — [::-1] works by code point, similar to JS spread
reversed_str = original[::-1]
words_reversed = ' '.join(original.split()[::-1])
// Java — StringBuilder.reverse() is code-unit based (same emoji caveat)
String reversed = new StringBuilder(original).reverse().toString();
// Go — []rune iterates by code point, safer than byte reversal
runes := []rune(original)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
    runes[i], runes[j] = runes[j], runes[i]
}
reversed := string(runes)
// PHP — strrev() is byte-based and mangles any multi-byte UTF-8
$reversed = strrev($original);          // breaks UTF-8

لاحظ النمط: تقريبًا كل لغة &#39؛s &quot؛واضح واقتباس؛ العكس يعتمد على وحدة التعليمات البرمجية أو البايت ويشارك نفس نقطة ضعف Unicode. يعد الوصول إلى خيار التعرف على الحرف هو الاستثناء وليس الخيار الافتراضي.

ما هو الشيء الجيد في الواقع لعكس السلسلة؟

بالإضافة إلى كونه بمثابة عملية إحماء أساسية للمقابلة، فإنه يكسب رزقه في أماكن قليلة.

الشيكات المتناظرة. قم بعكس السلسلة وقارنها بالأصل - إذا كانت متطابقة، فهو &#39؛ متناظر. يحاول racecar، level، أو 12321 في الأداة وشاهد الإخراج يعود متطابقًا. لعبارات متناظرة مثل &quot؛ رجل خطة لقناة بنما، &quot؛ مساحات الشريط والحالة أولا.

التحقق من الكود الخاص بك. عندما تقوم أنت و#39؛ بطحن مشكلات الانعكاس على نمط LeetCode، قم بلصق مخرجاتك المتوقعة في الأداة للتحقق من صحتها في ثانية. It&#39؛s أوراكل سريع لحالة عكس الشخصية.

الألغاز السريعة والنص المرح. الرسائل المتخلفة، وألعاب الكلمات، والمشاركات الاجتماعية ذات المرايا - المخاطر المنخفضة، والعكس هو معكوس خاص به، لذا فإن الرجوع للخلف مرتين يعطيك النسخة الأصلية. هذه الخاصية مفيدة للاختبار: عكس، عكس مرة أخرى، تأكيد &#39؛re الصفحة الرئيسية.

شيء واحد ل لا استخدمه من أجل: الأمان. الانعكاس هو خدعة احتفالية، وليس تشفيرًا - it&#39؛s تم التراجع عنه بشكل تافه. يظهر في المبتدئين والاقتباس؛ التشويش والاقتباس؛ البرامج التعليمية، ولكن لا تعامل النص المعكوس أبدًا على أنه محمي.

نوع عكسي مثال في الأداة؟ مقتطف الكود
الشخصيات abccba نعم (الوضع الوحيد) [...s].reverse().join('')
كلمات a b cc b a لا - افعل ذلك في الكود s.split(' ').reverse().join(' ')
خطوط انقلب ترتيب الخط لا - افعل ذلك في الكود s.split('\n').reverse().join('\n')
آمن للجرافيم الرموز التعبيرية تبقى سليمة لا - يحتاج إلى Intl.Segmenter انظر المستوى 3 أعلاه

نهج المؤشر الثنائي، إذا كنت &#39؛ الاستعداد للمقابلات

السبب الذي يجعل القائمين على المقابلات يحبون هذا السؤال هو أن الإجابة الأنيقة لا &#39؛ تستخدم عكسًا مدمجًا على الإطلاق. تمشي بمؤشرين تجاه بعضكما البعض وتتبادلان:

Original:  H E L L O
           i       j        swap H and O
           O E L L H
             i   j          swap E and L
           O L L E H
               ij           pointers meet — done

يتم تشغيله في الوقت O (n)، ويتم تنفيذه في مكانه على مصفوفة قابلة للتغيير، O (1) مساحة إضافية. في سلاسل JavaScript غير قابلة للتغيير حتى تتمكن من &#39؛ يتم التبديل حرفيًا في مكانها، ولكن منطق المؤشرين هو ما يفهمونه &#39؛ إعادة التحقق من فهمك. النسخة العودية - reverse(s) = last char + reverse(rest)- أجمل ولكنه يستخدم مساحة مكدس المكالمات O (n)، وهي المقايضة الجديرة بالذكر بصوت عالٍ في المقابلة.

وتذكر الخاصية التي تجعل الاختبار تافهًا: الانعكاس هو معكوسه. عكس سلسلة مرتين وأنت &#39؛ عد إلى حيث بدأت. عندما أقوم باختبار أي رمز انعكاس، فإن ذلك &#39؛s التأكيد رقم واحد: reverse(reverse(x)) === x بالنسبة لمجموعة من المدخلات بما في ذلك - على وجه الخصوص - الرموز التعبيرية، فإن الاختبار يلتقط خطأ الزوج البديل بدلاً من إخفائه.

الأسئلة الشائعة

هل تدعم أداة عكس السلسلة عكس الكلمة أو السطر؟

لا. يحتوي على وضع واحد يعكس الأحرف. هناك &#39؛ لا يوجد وضع منفصل لترتيب الكلمات أو ترتيب الأسطر. إذا كنت بحاجة إلى عكس ترتيب الكلمات أو الأسطر، فافعل ذلك بالرمز split(' ') أو split('\n') تليها .reverse().join(...).

لماذا تخرج الرموز التعبيرية مشوهة بعد الانعكاس؟

لأن الأداة تنعكس بواسطة وحدة التعليمات البرمجية UTF-16، مثل JavaScript&#39؛s split(''). يتم تخزين تسلسلات الرموز التعبيرية والعلامات كأزواج بديلة - وحدتان رمزيتان لا معنى لهما إلا معًا - ويؤدي عكسهما إلى تقسيمهما. النص العادي وأحرف CJK عبارة عن وحدات رمز مفردة، لذا يتم عكسها بشكل صحيح.

هل يتعامل مع نص Unicode وCJK؟

جزئياً. يتم عكس الأحرف المميزة الصينية واليابانية والكورية والسيريلية والمكونة مسبقًا بشكل صحيح لأن كل منها عبارة عن وحدة تعليمات برمجية واحدة. سوف تنكسر الرموز التعبيرية والرموز التعبيرية للعلم وعلامات الدمج المتحللة. للتعامل الصحيح تمامًا مع التعليمات البرمجية الخاصة بك، استخدم Intl.Segmenter مع دقة الحرف.

هل يتم إرسال النص الخاص بي إلى الخادم؟

لا. يحدث الانعكاس محليًا في متصفحك أثناء الكتابة - لا يتم تحميل النص مطلقًا. وهذا يجعله آمنًا لعكس السلاسل الحساسة أو الخاصة.

كيف يمكنني التحقق مما إذا كانت الكلمة متناظرة؟

عكس ذلك مع عكس السلسلة أداة ومقارنتها بالأصل. إذا كانت &#39؛ متطابقة، فهي &#39؛ متناظرة. بالنسبة للعبارات، قم بإزالة المسافات وعلامات الترقيم واختلافات الحالة قبل المقارنة - &quot؛ رجل يخطط لقناة بنما وحاصل؛ هو متناظر فقط بعد التطبيع.

هل يمكنه التعامل مع نص طويل جدًا؟

نعم. نظرًا لأنه يعمل في متصفحك، فإن الحد العملي هو جهازك وذاكرة #39؛s، والتي تغطي بشكل مريح ملايين الأحرف. إنه ينعكس مباشرة أثناء الكتابة، لذلك قد تبدو المعاجين الكبيرة للغاية أقل فورية قليلاً، ولكن لا يوجد خادم ذهابًا وإيابًا.

لماذا يعد عكس سلسلة مثل هذا السؤال الشائع للمقابلة؟

إنه يجمع الكثير من الأساسيات في مشكلة واحدة صغيرة: معالجة المصفوفة والسلسلة، وتقنية المؤشر الثنائي، والمقايضات الموضعية مقابل النسخ، والتكرار، و- إذا كان القائم بإجراء المقابلة حادًا - حالات حافة Unicode. It&#39؛ من السهل البدء ولديه عمق كافٍ لفصل الإجابة السريعة عن الإجابة الشاملة.

الأدوات ذات الصلة:

Frequently Asked Questions

No. It has a single mode that reverses characters. There's no separate word-order or line-order mode. If you need to reverse the order of words or lines, do it in code with split(' ') or split('\n') followed by .reverse().join(...).

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!