相当于sscanf的C ++?

问题描述

| 我一直在使用
sscanf
,我认为我对此太自在了。显然它也已弃用,我应该使用
sscanf_s
,据我所知,这不是标准的。因此,我想知道STL是否具有惯用的C ++替代品吗? 谢谢 我做:
        sscanf(it->second->c_str(),\"%d %f %f %f %f %f %f %d \\\" %[^\\\"] \\\" \\\" %[^\\\"]\",&level,&x,&y,&angle,&length,&minAngle,&maxAngle,&relative,name,parentName);
    

解决方法

格式化不是那么容易,但请查看
stringstream
。有关输入和输出缓冲区的格式化,另请参见ѭ4和ѭ5。     ,在C ++中,最终的解析器是Boost.Qi
#include <boost/spirit/include/qi.hpp>
#include <string>

namespace qi = boost::spirit::qi;

int main()
{
    int level,relative;
    float x,y,angle,length,minAngle,maxAngle;
    std::string name,parentName;

    std::string input = \"20 1.3 3.7 1.234 100.0 0.0 3.14 2 \\\"Foo\\\" \\\"Bar\\\"\";
    std::string::iterator begin = input.begin();
    std::string::iterator end = input.end();

    using qi::int_;
    using qi::float_;
    using qi::char_;
    using qi::lit;
    using qi::ascii::space;

    qi::phrase_parse(begin,end,int_ >> float_ >> float_ >> float_ >> float_ >> float_ >> float_ >> int_
             >> lit(\"\\\"\") >> *(~char_(\'\"\')) >> lit(\"\\\"\")
             >> lit(\"\\\"\") >> *(~char_(\'\"\')) >> lit(\"\\\"\"),space,level,x,maxAngle,relative,name,parentName);
}
    ,您可以尝试使用stringstream。它比sscanf功能强大得多,并且可以达到目的。     ,我相信stringstreams是您想要的。 例如:
stringstream tokenizer;
string str(\"42\");
int number;

tokenizer << string;
tokenizer >> number;
    ,如果您使用的是具有足够C ++ 0x支持的编译器,则很容易编写类型安全的
scanf()-style
函数...在http://en.wikipedia.org/上阅读了
printf()
示例。 wiki / C%2B%2B0x让您开始...。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...