ما هو الفرق بين مجموعة شار و سلسلة ؟
-
21-09-2019 - |
سؤال
قضاء الوقت على مستوى عال لغات فجأة خطر لي أنني لا أعرف الفرق بين مجموعة شار و سلسلة.أعتقد أنهم نفس الشيء ولكن لست متأكدا.هل هناك فرق ؟ هل هو مجرد مجموعة شار مع بعض مجردة ؟
المحلول
صفيف الأحرف هو ببساطة مجموعة من الشخصيات
السلسلة هي بنية البيانات التي تستخدم مجموعة من الأحرف
تستخدم بعض تمثيلات السلسلة أحد الأطراف الفارغة (مثل C) ، والبعض الآخر يستخدم بادئة الطول
نصائح أخرى
سلسلة هو تجريد ، ولكن من أ تسلسل من الشخصيات. لا تقول شيئًا عن التنفيذ. إذا كنت ترغب في إنشاء تطبيق سلسلة بناءً على قائمة مرتبطة بالأحرف ، فلا يوجد شيء يمنعك.
في لغة مثل C ، هناك اختلاف ضئيل للغاية - فقط أن سلسلة AC هي سلسلة من الأحرف المُغلقة الفارغة في عناوين متسلسلة ، والتي يتم الوصول إليها بشكل عام من خلال مؤشر.
في لغة OOP ، ستكون السلسلة كائنًا لبعض فئة السلسلة. من المحتمل أن يحتفظ هذا بالبيانات في صفيف الأحرف داخليًا ، لكنك لا تحتاج إلى معرفة ذلك. لا يمكن أن تكون صفيف الأحرف سوى صفيفًا بسيطًا ، ولكن يمكن لفئة السلسلة أن توفر العديد من العمليات (الفرعية ، regex ، إلخ) على الأوتار إذا قرر المنفذ ذلك.
كنت ادرس البرمجة, و هذا هو كيف تستخدم لشرح هذه المسألة بالذات.
أولا التركيز على ما كل الأشياء مشترك:كل مجموعة شار و سلسلة تتكون من سلسلة من الأحرف.كونه تسلسل يعني أن الشخصيات هي أمر يمكن تعدادها على سبيل المثال.
الآن التركيز على كل ما من شيئين إضافة ، خاصة بهم مختلفة الطرق إلى هذه الأرضية المشتركة.
A شار مجموعة يضيف أي مجموعة من المعروف أن إضافة:الفهرسة و الوصول العشوائي إلى العناصر الفردية.
A سلسلة, من ناحية أخرى, يضيف حقيقة أن تسلسل حرف يعتبر كل شيء مع الخصائص الخاصة بها.في بعض التطبيقات ، تحقيق هذا يعني تغيير طريقة حرف يتم تخزين (إضافة إنهاء null في ج السلاسل ، على سبيل المثال).
هذا النهج (انظر القواسم المشتركة, ثم كيف أن الأشياء تختلف من لهم) وقد ثبت مفيدة في مجموعة متنوعة من الحالات.
ويساعد هذا الأمل.
في C ، تكون هذه هي نفسها تقريبًا ، على الرغم من أن السلسلة سيكون لها حرف فارغ إضافي في النهاية.
في لغات أخرى (Java ، c# etc) ، فإن السلسلة هي كائن ، في حين أن صفيف الأحرف عبارة عن مجموعة من ... chars (وهي أنواع البيانات البدائية).
عادة ، يتم تنفيذ السلاسل مع صفائف الأحرف.
الجواب إلى حد ما يعتمد على اللغة التي تتحدث عنها. في السلاسل العالمية .NET/C# هي كائنات غير قابلة للتغيير ، في حين أن صفيف char يمكنك إضافة/تغيير القيم بسهولة في الصفيف. يمكن التعامل مع الأوتار على أنها صفائف char بطريقة للقراءة فقط ، حيث يمكنك التكرار على الشخصيات في سلسلة.
في الخلاصة ، أعتقد أن الفرق الأكبر هو في الطريقة التي تريد العمل بها. هل ترغب في العمل مع جزء كبير من النص ، على سبيل المثال إظهار رسالة إلى مستخدم نهائي ، أم أنك تبحث في سلسلة من الأحرف ، مما يؤدي إلى بعض المعالجة في القائمة؟ كل شيء شخصي إلى حد ما على مستوى معين.
String
هو class
في جافا. لذلك لديها سمات على سبيل المثال length
. لذلك عندما تسأل عن حجم السلسلة ، فإنه يعيد ببساطة ذلك بدلاً من حساب القيمة في كل مرة. كما أنه طرق أخرى على سبيل المثال indexOf
, substring
, وما إلى ذلك لجعل الحياة سهلة حتى لا تضطر إلى القيام بذلك بنفسك.
يتم تمثيل السلسلة على غرار C داخليًا بواسطة مجموعة من الأحرف مع " 0" في النهاية ، مما يدل على نهاية السلسلة.
في C ++ ، هناك فئة حاوية سلسلة محددة في String.H والتي توفر بعض عمليات السلسلة النموذجية لمعالجة السلسلة.
ذلك يعتمد على اللغة. بلغات C-ish ، فهي مخللة إلى حد كبير. يمكنك المطالبة بالفرق هو أن "الأوتار" لها نولًا ضمنيًا ، لكن ذلك سيكون تقسيم الشعر.
فورتران هو الطرف الآخر. هناك صفائف أحرف وسلاسل الأحرف هي أنواع مختلفة تمامًا ، مع وجود عمليات مختلفة متاحة لهم.
السلسلة هي مجموعة الأحرف التي تم إنهاءها بواسطة حرف فارغ " 0"
في C ، السلسلة عبارة عن مجموعة من الأحرف التي تم إنهاءها بواسطة حرف فارغ ( 0) ولكن
في C ++ ، تكون السلسلة فئة ونستخدم كائنها ولا يوجد حرف فارغ في النهاية ولكن مجموعة من الأحرف تحتوي على حرف فارغ في النهاية.
أيضًا ، يمكننا استخدام المشغلين مع كائن السلسلة في C ++.