我必须格式化std::string用sprintf,并将其发送到文件流.我怎样才能做到这一点?
首先,似乎我在征求主观意见,但这并不是我所追求的。我很想听听有关该主题的一些有充分根据的论点。
为了对如何设计现代流/序列化框架有所了解,我最近得到了Angelika Langer和Klaus Kreft撰写的《Standard C ++ IOStreams and Locales》一书的副本。我发现,如果IOStreams的设计不当,那么它就不会首先进入C ++标准库。
在阅读了本书的各个部分之后,我开始怀疑IOStreams是否可以从整体架构的角度与STL进行比较。阅读例如对Alexander Stepanov(STL的“发明人”)的采访,以了解有关STL的一些设计决策。
特别令我惊讶的是:
谁来负责IOStreams的总体设计似乎是个未知数(我很想阅读有关此的一些背景信息-有人知道好的资源吗?);
一旦你钻研输入输出流,例如眼前表面之下,如果你想输入输出流用自己的类扩展,你会得到一个接口具有相当神秘和扑朔迷离的成员函数的名称,例如getloc/ imbue,uflow/ underflow,snextc/ sbumpc/ sgetc/ sgetn,pbase/ pptr/ epptr(和有可能甚至更糟的例子)。这使得了解整体设计以及单个零件如何协作变得更加困难。即使我上面提到的那本书没有帮助那多(恕我直言)
因此,我的问题是:
如果你要判断今天的软件工程标准(如果确实是对这些任何普遍同意),将C ++的输入输出流仍然被认为是经过精心设计?(我不想通过通常认为过时的方法来提高软件设计技能。)
在新的C++代码中,我倾向于使用C++ iostream库而不是C stdio库.
我注意到一些程序员似乎坚持stdio,坚持认为它更便携.
这是真的吗?有什么好用的?
我试图通过设置不同字段的宽度在C++上创建一个整齐格式的表.我可以使用setw(n),做类似的事情
cout << setw(10) << x << setw(10) << y << endl;
Run Code Online (Sandbox Code Playgroud)
或更改ios_base :: width
cout.width (10);
cout << x;
cout.width (10);
cout << y << endl;
Run Code Online (Sandbox Code Playgroud)
问题是,这两种选择都不允许我设置默认的最小宽度,每次我都要向流写入内容时我必须更改它.
有没有人知道我可以做到这一点而无需无数次重复同一次呼叫?提前致谢.
我想使用提供的工具stringstream从固定格式中提取值string作为类型安全的替代sscanf.我怎样才能做到这一点?
请考虑以下特定用例.我有std::string以下固定格式:
YYYYMMDDHHMMSSmmm
哪里:
YYYY = 4 digits representing the year
MM = 2 digits representing the month ('0' padded to 2 characters)
DD = 2 digits representing the day ('0' padded to 2 characters)
HH = 2 digits representing the hour ('0' padded to 2 characters)
MM = 2 digits representing the minute ('0' padded to 2 characters)
SS = 2 digits representing the second ('0' padded to 2 characters)
mmm …Run Code Online (Sandbox Code Playgroud) 可能重复:
在C++ cin或printf中printf vs cout
?
我一直想知道printf和cout ..哪一个最终更快,并且它也是最灵活的(即可以打印一系列变量,输出可以格式化)?
PS我知道这看起来类似于C++中的'printf'和'cout',但我并不是真的在问同样的事情.
可能重复:
打印cout时的C++对齐<<
我在输出文件中写了一组单词.我在单词之间使用'\ t'字符留下了三个制表空间.但有时当单词太小或太大时,对齐似乎存在问题.如何在单词之间给出一个恒定的空格,即使单词很小也可以使用?
这就是我在说什么.
Word:elpmas Count:1
Word:This Count:4
Word:pmasel Count:1
Word:is Count:1
Word:sample Count:1
Word:sentence Count:1
Word:si Count:1
Word:a Count:1
Run Code Online (Sandbox Code Playgroud)
我希望在单词和计数之间有一个恒定的空格.我目前正在使用
cout<< "Word:"<< hash->key <<"\t\t\t" << "Count:" << hash->value <<endl;
Run Code Online (Sandbox Code Playgroud)
帮帮我.