gpt4 book ai didi

c++ - istringstream 将字符串放回输入并再次读取

转载 作者:太空宇宙 更新时间:2023-11-04 15:58:50 25 4
gpt4 key购买 nike

所以我从文件中读出行,然后通过 stringstream 读出这些行。

我发现问题是由于行的格式很少将 2 个单独的部分写在一起并作为一个字符串一起读取。我试图通过将错误的读取值放回流中并再次读取来解决这种情况,但看起来 istringstream 并不关心我将字符放回原处。他们根本不会再读出来。

这里问题分解了。 S1 是一个很好的字符串。 S2 解决了评论中错误阅读的问题:

简而言之。是否可以将字符串放回 istringstream 并在下一个操作中读取它??

#include <sstream>
#include <string>
#include <vector>


int main()
{
std::string device_id; //126, I_VS_MainVoltageAvailabl
std::string ea_type; //E
std::string address; //0.1
std::string data_type; //BOOL
std::vector<std::string> comment; //VS - Steuerspannung vorhanden / Main voltage available"

std::string s1 = "126,I_Btn_function_stop E 1.2 BOOL Taster Stopp Funktion / Button Stop Function";
std::string s2 = "126,I_VS_MainVoltageAvailablE 0.1 BOOL VS - Steuerspannung vorhanden / Main voltage available";

std::istringstream ist{ s2 };
ist >> device_id; // Read 126, I_VS_MainVoltageAvailablE the E should be read in ea_type
ist >> ea_type; // 0.1

//my idea
if (!ea_type.empty() && isdigit(static_cast<unsigned char>(ea_type[0]))) { //first is a digit so already next was read

for (const auto& x : ea_type) //Try to put 0.1 in the stream
ist.putback(x);

ea_type = device_id[device_id.size() - 1]; // = "E"
device_id.pop_back(); // = "126, I_VS_MainVoltageAvailabl"
}
ist >> address; // Expected "0.1" instead "BOOL" why 0.1 was putback on the stream???
ist >> data_type;

for (std::string in; ist >> in;)
comment.push_back(in);
}

最佳答案

像往常一样,人们会忽略返回码。 putback 有一个返回码是有原因的,当它为 false 时,表示 putback 失败。

特别是,std::istringstream输入 字符串流,因此是仅输入流。因此,您不能对其使用 putback,它总是会失败。

但是,您可以改用 std::stringstream,这样 putback 就会按照您希望的方式运行。

关于c++ - istringstream 将字符串放回输入并再次读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49308393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com