كيف يمكنني تحليل رمز مميز من سلسلة في لغة C؟

StackOverflow https://stackoverflow.com/questions/558368

  •  05-09-2019
  •  | 
  •  

سؤال

كيف يمكنني تحليل الرموز المميزة من سلسلة الإدخال.على سبيل المثال:

char *aString = "Hello world".

أريد أن يكون الإخراج:

"مرحبا بالعالم"

هل كانت مفيدة؟

المحلول

سوف تريد استخدامها strtok - هنا هو مثال جيد.

نصائح أخرى

إلقاء نظرة على strtok., ، جزء من المكتبة القياسية.

strtok هي الإجابة السهلة، ولكن ما تحتاجه حقًا هو معجم يقوم بذلك بشكل صحيح.خذ بعين الاعتبار ما يلي:

  • هل هناك مسافة واحدة أو مسافتين بين "مرحبا" و"العالم"؟
  • هل يمكن أن يكون ذلك في الواقع أي قدر من المسافات البيضاء؟
  • هل يمكن أن يشمل ذلك مسافة بيضاء رأسية ( ، \f، \v) أو أفقيًا فقط (\s، ، )؟
  • هل يمكن أن يتضمن ذلك أي أحرف مسافة بيضاء من UNICODE؟
  • إذا كانت هناك علامات ترقيم بين الكلمات ("مرحبًا، أيها العالم")، فهل ستكون علامات الترقيم رمزًا منفصلاً أم جزءًا من "مرحبًا" أم سيتم تجاهلها؟

كما ترون، فإن كتابة المعجم الصحيح ليس بالأمر السهل، و strtok ليس معجمًا مناسبًا.

يمكن أن تكون الحلول الأخرى عبارة عن آلة حالة حرف واحد تقوم بما تحتاجه بالضبط، أو حل قائم على regex يجعل تحديد موقع الكلمات مقابل الفجوات أكثر عمومية.هناك عدة طرق.

وبالطبع، كل هذا يعتمد على متطلباتك الفعلية، وأنا لا أعرفها، لذا ابدأ بها strtok.لكن من الجيد أن تكون على دراية بالقيود المختلفة.

لإصدارات إعادة الدخول، يمكنك استخدامهاStrtok_s ل Visual Studio أو strtok_r ل unix.

ضع في اعتبارك أن Strtok هو جدا من الصعب الحصول عليها بشكل صحيح، لأنه:

  • يعدل المدخلات
  • يتم استبدال المحدد بمهمة فارغة
  • يدمج المحددات المجاورة، وبالطبع،
  • ليس خيط آمن.

يمكنك أن تقرأ عن هذا لبديل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top