سؤال

ولدي مشكلة أن sscanf يحل (استخراج الأشياء من سلسلة). أنا لا أحب sscanf على الرغم من أنها ليست اكتب آمنة وقديمة ومروعة. أريد أن تكون ذكية واستخدام بعض أجزاء أكثر حداثة من مكتبة القياسية C ++. ماذا يجب أن تستخدم بدلا من ذلك؟

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

المحلول

std::stringstream :

#include <sstream>

...

std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;

نصائح أخرى

لمعظم الوظائف تيارات القياسية القيام بهذه المهمة على أكمل وجه،

std::string data = "AraK 22 4.0";
std::stringstream convertor(data);
std::string name;
int age;
double gpa;

convertor >> name >> age >> gpa;

if(convertor.fail() == true)
{
    // if the data string is not well-formatted do what ever you want here
}

إذا كنت تحتاج إلى أدوات أكثر قوة للتحليل أكثر تعقيدا، ثم هل يمكن أن تنظر التعبيرات المنتظمة أو حتى الروح من دفعة.

إذا قمت بتضمين sstream سوف تتمكن من الوصول إلى الطبقات stringstream التي توفر تيارات سلاسل، وهو ما تحتاجه. Roguewave ديه أمثلة بعض على كيفية استخدامها .

إذا كنت تريد حقا عدم استخدام تيارات (انها جيدة بسبب سهولة القراءة)، يمكنك استخدام StringPrintf.

ويمكنك العثور على تنفيذها في الحماقة:

https://github.com/facebook/folly/ فقاعة / الماجستير / حماقة / String.h # L165

وfgets أو strtol

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