سؤال

أعلم أن هناك رواقيات سلسلة ولكن هل هناك "مملكه الدولي"؟

على سبيل المثال، أريد تقسيم السلسلة "12 34 46" وايت:

قائمة [0] = 12

قائمة [1] = 34

قائمة [2] = 46

على وجه الخصوص، أتساءل عما إذا كان دفعة :: Tokenizer يفعل هذا. على الرغم من أنني لم أستطع العثور على أي أمثلة لم تستخدم السلاسل.

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

المحلول

نعم هناك: استخدم مجرى، مثل stringstream:

stringstream sstr("12 34 46");
int i;
while (sstr >> i)
    list.push_back(i);

بدلا من ذلك، يمكنك أيضا استخدام خوارزميات STL و / أو محولات ITERATOR مجتمعة مع المنشئين:

vector<int> list = vector<int>(istream_iterator<int>(sstr), istream_iterator<int>());

نصائح أخرى

ال مكتبة مجموعة أدوات سلسلة C ++ (Strtk) لديه الحل التالي لمشكلتك:

#include <string>
#include <deque>
#include "strtk.hpp"

int main()
{ 
   {
      std::string data = "12 34 46";
      std::deque<int> int_list;
      strtk::parse(data," ",int_list);
   }

   {
      std::string data = "12.12,34.34|46.46 58.58";
      std::deque<double> double_list;
      strtk::parse(data," ,|",double_list);
   }

   return 0;
}

يمكن العثور على المزيد من الأمثلة هنا

ملاحظة: عملية التحليل هي الى ابعد حد سريع وفعال، وضع حلول قائمة على Stdlib وتعزيز الخجل.

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

لست متأكدا مما إذا كنت تستطيع القيام بذلك دون استخدام السلسلة أو Char * لأنه يجب عليك ولكن كلا الارقام والمسافات في نفس المجموعة ...

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