可以将 C++ 输入分隔符从 space 更改为点吗?
Can c++ input separator be changed from space to dot?
确切地说,我想编写一个程序将 IP 地址转换为二进制格式,如 202.117.1。20.So 有没有一种方法可以使输入以点分隔,以便我可以将 202 读取为 int但不是字符串?
修改:为什么输入流被space分隔,我可以把它改成点,或者任何我喜欢的字符吗?
明显的可能性是这样的:
unsigned o1, o2, o3, o4;
char dot1, dot2, dot3;
infile >> o1 >> dot1 >> o2 >> dot2 >> o3 >> dot3 >> o4;
assert(dot1=='.' && dot2=='.' && dot3=='.');
assert(o1 < 256 && o2 < 256 && o3 < 256 && o4 < 256);
如果您真的不想显式读取 .
字符,您可以创建一个将 .
分类为空白的 ctype 方面,然后使用该方面创建一个语言环境,并注入使用该语言环境进行流式传输。
如果您需要编写大量代码来忽略输入中的 .
,这可能是值得的。我已经在 another answer 中发布了这样一个方面。在这里您将使用它,但阅读 int
s(或 unsigned
等)而不是字符串。
确切地说,我想编写一个程序将 IP 地址转换为二进制格式,如 202.117.1。20.So 有没有一种方法可以使输入以点分隔,以便我可以将 202 读取为 int但不是字符串? 修改:为什么输入流被space分隔,我可以把它改成点,或者任何我喜欢的字符吗?
明显的可能性是这样的:
unsigned o1, o2, o3, o4;
char dot1, dot2, dot3;
infile >> o1 >> dot1 >> o2 >> dot2 >> o3 >> dot3 >> o4;
assert(dot1=='.' && dot2=='.' && dot3=='.');
assert(o1 < 256 && o2 < 256 && o3 < 256 && o4 < 256);
如果您真的不想显式读取 .
字符,您可以创建一个将 .
分类为空白的 ctype 方面,然后使用该方面创建一个语言环境,并注入使用该语言环境进行流式传输。
如果您需要编写大量代码来忽略输入中的 .
,这可能是值得的。我已经在 another answer 中发布了这样一个方面。在这里您将使用它,但阅读 int
s(或 unsigned
等)而不是字符串。