可以将 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 中发布了这样一个方面。在这里您将使用它,但阅读 ints(或 unsigned 等)而不是字符串。