C++ 打印元组的元素

C++ 打印元组的元素,c++,cout,stdtuple,C++,Cout,Stdtuple,我试图打印一个函数返回的元组元素,在这个函数中,我将地址向量的元素与数据库中的元素进行比较。字段为:32位int表示地址,int表示前缀匹配,字符串包含ASN,字符串包含匹配地址,字符串包含被查询的原始地址 for (auto itr = IPs.begin(); itr != IPs.end(); itr++) { tuple<int,int,string,string,string> entry = Compare(*itr, database); string

我试图打印一个函数返回的元组元素,在这个函数中,我将地址向量的元素与数据库中的元素进行比较。字段为:32位int表示地址,int表示前缀匹配,字符串包含ASN,字符串包含匹配地址,字符串包含被查询的原始地址

for (auto itr = IPs.begin(); itr != IPs.end(); itr++) {
    tuple<int,int,string,string,string> entry = Compare(*itr, database);
    string out = get<3>(entry) + "/" + to_string(get<1>(entry)) + " " + get<2>(entry) + " " + get<4>(entry) + "\n";
    cout << out;
}
预期产出为:

12.105.69.144/28 15314 12.105.69.152
12.125.142.16/30 6402 12.125.142.19
57.0.208.244/30 6085 57.0.208.245
208.148.84.0/30 4293 208.148.84.3
208.148.84.0/24 4293 208.148.84.16
208.152.160.64/27 5003 208.152.160.79
192.65.205.248/29 5400 192.65.205.250
194.191.154.64/26 2686 194.191.154.80
199.14.71.0/24 1239 199.14.71.79
199.14.70.0/24 1239 199.14.70.79
最让我困惑的是,当我通过用换行符替换每个分隔符在单独的行上打印每个元素时,它会正确打印元素:

12.105.69.144
28
15314
12.105.69.152
12.125.142.16
30
6402
12.125.142.19
57.0.208.244
30
6085
57.0.208.245
208.148.84.0
30
4293
208.148.84.3
208.148.84.0
24
4293
208.148.84.16
208.152.160.64
27
5003
208.152.160.79
192.65.205.248
29
5400
192.65.205.250
194.191.154.64
26
2686
194.191.154.80
199.14.71.0
24
1239
199.14.71.79
199.14.70.0
24
1239
199.14.70.79

我想我可以编写另一个函数,然后将换行符格式化为正确的格式,但我很好奇是什么导致了这种情况。有什么想法吗?

您能提供更多的代码,以便对其进行调试以精确跟踪问题吗

我认为
tuple
get
使用正确

我猜问题出在字符串的内容上,或者至少在`get(entry)返回的字符串上

下面是一个小例子,说明了可能的错误

std::string aa = "AAAAA\r"; //"\r" is extra character in aa string
std::string bb = "bbb";
std::cout << aa + " " + bb; //output is " bbbA" not "AAAAA bbb"
std::string aa=“AAAAA\r”//“\r”是aa字符串中的额外字符
std::string bb=“bbb”;

std::cout为什么不直接打印到
cout
,而不使用所有临时字符串?对不起,这只是我在cout之后尝试了一些随机的东西,可能
条目中的字符串包含一些垃圾?我觉得情况并非如此,因为当我打印所有以换行符分隔的内容时。我将每个字符串文字更改为换行符,元素输出正确。对正在发生的事情毫无头绪。但您是否通过直接检查字符串内容来检查这一点?
std::string aa = "AAAAA\r"; //"\r" is extra character in aa string
std::string bb = "bbb";
std::cout << aa + " " + bb; //output is " bbbA" not "AAAAA bbb"