限制整数的 istream 读取宽度
Limit the istream read width for integers
我有一个包含"1514"之类的数据的流,我想读取两个数字 15 和 14。
我尝试使用std::setw
,但它似乎不适用于整数。
#include <sstream>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
stringstream stringStream("1415");
string s1,s2;
stringStream>>setw(2)>>s1>>setw(2)>>s2;
cout<<"s1: "<<s1<<", s2: "<<s2<<endl;
stringstream intStream("1415");
int i1,i2;
intStream>>setw(2)>>i1>>setw(2)>>i2;
cout<<"i1: "<<i1<<", i2: "<<i2<<endl;
}
我希望整数在字符串完成时以解析方式解析。
所以我想要 i1=14 和 i2=15。
简单的方法:首先创建一个 3 个字符的数组并使用 null 终止符初始化:
char arr[3]{};
从 iostream 中提取两个字符:
stringStream.get(arr, 2);
将子字符串转换为整数:
// alternatives: std::strtol, boost::lexical_cast
std::istringstream subss(arr);
int i1;
subss >> i1;
对接下来的两位数字重复此操作。
复杂方法:使用解析器生成器。遵循 BNF 可能会解决问题:
<input> ::= <i1><i2>
<i1> ::= <twodig>
<i2> ::= <twodig>
<twodig> ::= <digit><digit>
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 在C++中测量postscript字体宽度
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- 从字符串流中读取具有特定字段宽度的 int
- 警告:左移计数 >= 在 C++ 中将字节流读取为双精度变量时的类型宽度
- 限制整数的 istream 读取宽度
- 在C++中读取bmp文件的宽度和高度
- 测量 l1/l2 缓存中加载的用于读取(包括预取)的行数
- 来自单个数字输入的Arduino读取脉冲宽度频率和占空比
- Win32 C/C++从字节数组读取BMP宽度和高度
- Boost.python 将对象拉取到本地范围内以进行读取访问
- Windows XP在C++中启动时读取文本文件的速度较慢;预取
- 读取PPM文件头(类型P6),宽度缺失
- c++读取csv文件;每行取两个字符串