C++ equivalent of sscanf?

C++ equivalent of sscanf?

本文关键字:sscanf of equivalent C++      更新时间:2023-10-16

我一直在使用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 .另请参阅输入和输出缓冲区格式的istringstreamostringstream

在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, y, angle, length, minAngle, maxAngle, relative, name, parentName);
}

您可以尝试使用字符串流。它比sscanf强大得多,并且可以达到目的。

我相信字符串流就是你要找的。

例如:

stringstream tokenizer;
string str("42");
int number;
tokenizer << string;
tokenizer >> number;

如果您使用的是具有足够 C++0x 支持的编译器,则很容易编写类型安全的 scanf()-style 函数...阅读 http://en.wikipedia.org/wiki/C%2B%2B0x printf()示例以帮助您入门。