C++ C++;相当于sscanf?
我一直在使用C++ C++;相当于sscanf?,c++,stl,C++,Stl,我一直在使用sscanf,我觉得我对它太适应了。显然它也被弃用了,我应该使用sscanf\u s,据我所知,这不是标准的。所以我想知道STL是否有一个惯用的C++替换做同样的事情? 谢谢 我有: 格式设置不是那么简单,但请检查。有关输入和输出缓冲区格式的信息,请参见istringstream和ostringstream。您可以尝试使用。它比sscanf强大得多,并且可以达到这个目的。我相信stringstreams是您所需要的 例如: stringstream tokenizer; string
sscanf
,我觉得我对它太适应了。显然它也被弃用了,我应该使用sscanf\u s
,据我所知,这不是标准的。所以我想知道STL是否有一个惯用的C++替换做同样的事情?
谢谢
我有:
格式设置不是那么简单,但请检查。有关输入和输出缓冲区格式的信息,请参见
istringstream
和ostringstream
。您可以尝试使用。它比sscanf强大得多,并且可以达到这个目的。我相信stringstreams是您所需要的
例如:
stringstream tokenizer;
string str("42");
int number;
tokenizer << string;
tokenizer >> number;
stringstream标记器;
字符串str(“42”);
整数;
标记器>数字;
在C++中,最终的解析器是Booost。
#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);
}
#包括
#包括
名称空间qi=boost::spirit::qi;
int main()
{
智力水平,相对;
浮动x、y、角度、长度、最小角度、最大角度;
std::字符串名称,父名称;
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();
使用qi::int_;
使用qi::float_;
使用qi::char\ux;
使用qi::lit;
使用qi::ascii::space;
短语解析(开始,结束,
浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型浮点型_
>>发光(“\”)>>*(~char(“”)>>发光(“\”)
>>发光(“\”)>>*(~char(“”)>>发光(“\”),
空间
级别、x、y、角度、长度、最小角度、最大角度、相对、名称、父名称);
}
如果您使用的编译器具有足够的C++0x支持,那么编写类型安全的scanf()-style
函数很容易。。。请阅读位于的printf()
示例,以便开始….如果这是我将坚持使用sscanf的唯一解决方案,则stringstream将为更多的代码行让路。请查看前面的问题。也许你会发现一些有趣的东西。sscanf
并不是很受欢迎。但是,C++中不推荐使用.<代码> sSCANFYS是VC++扩展。您使用VC10?在您的属性页中定义“CRT\u SECURE\u NO\u”警告并完成它。呸!*\s
函数适用于那些应该使用BASIC编程的人。学习如何使用你的工具。否则,根本不要使用它们。在任何情况下,C++等同于代码> sSCANF >代码> SCASNF >:
#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);
}