C++:用一个istringstream对象读入参数

C++: read in arguments with one istringstream object

本文关键字:对象 istringstream 参数 一个 C++      更新时间:2023-10-16
int i1;
std::istringstream z(argv[1]);
z >> i1;
cout << i1;
z.str(argv[2]);
int i2;
z >> i2;
cout << i2;

这是我的密码。我的第一个论点是123,第二个论点是12。我预计输出为12312。相反,我看到了1234196880。为什么?我想用str方法可以将流重置为第二个参数并读入?

进行时

z.str(argv[2]);

函数在内部调用其内部字符串缓冲区对象的str成员(http://www.cplusplus.com/reference/sstream/stringbuf/str/)只是设置字符串缓冲区的内容。您需要倒带指针才能使用新设置的缓冲区(http://en.cppreference.com/w/cpp/io/basic_istream/seekg)

我假设您只使用istringstream,以便轻松地将字符串转换为整数。

如果是这样的话,我建议编写一个辅助函数:

template<typename TargetType>
TargetType convert(const std::string& value) {
    TargetType converted;
    std::istringstream stream(value);
    stream >> converted;
    return converted;
}

这样,您的代码变得更可读,并且避免了每次转换都必须重置流:

int i1 = convert<int>(argv[1]);
int i2 = convert<int>(argv[2]);

编辑:如果您的编译器支持C++11,您也可以简单地使用std::stoi