从字符串中读取多个数据,使用sstream以字符分隔
Reading multiple data from string, separated by characters using sstream
我有一个.txt
文件,里面有这样的文本(这只是一个片段):
...
[332, 605]-[332, 592], srednica: 13
[324, 593]-[332, 605], srednica: 14.4222
[323, 594]-[332, 605], srednica: 14.2127
[323, 594]-[331, 606], srednica: 14.4222
[324, 593]-[324, 607], srednica: 14
[323, 594]-[323, 607], srednica: 13
[319, 596]-[319, 607], srednica: 11
[320, 595]-[320, 607], srednica: 12
...
我需要做的是从每行中获得前4个数字并将它们存储为整数。
我试过这样做:
ifstream file("punkty_srednice.txt");
string line;
int ax, ay, bx, by;
while(getline(file, line)) {
stringstream s(line);
string tmp;
s >> tmp >> ax >> tmp >> ay >> tmp >> bx >> tmp >> by >> tmp;
cout << ax << " " << ay << " " << bx << " " << by << endl;
}
输出(只是其中的一部分):
...
506 506 -858993460 -858993460
503 503 -858993460 -858993460
495 503 -858993460 -858993460
497 503 -858993460 -858993460
500 497 -858993460 -858993460
492 503 -858993460 -858993460
...
你可以看到有一些奇怪的数字,如-858993460
我做了其他尝试通过删除tmp
和直接这样做:
s >> ax >> ay >> bx >> by;
,但输出只包含垃圾数字,如-858993460
我该怎么处理呢?
您可以使用std::getline
和','
作为分隔符来获得带有数字的第一部分。然后用空格替换所有非数字字符(参见示例std::transform
)。然后将结果字符串放入std::istringstream
并从中读取四个数字。
关于代码错误的一些提示,它主要归结为当与字符串一起使用时,输入操作符>>
读取以空格分隔的字符串。
对于
这一行<>之前[332,605]-[332,592]之前你的输入将是
- 放到
tmp
中,它会把"[332,"
放到 - 放到
ax
中它会把605
放到 - 放到
tmp
中,它会把"]-[332,"
放到 - 放到
ay
中,它会把592
放到 - 放到
tmp
中,它会把"],"
放到 - 进入
bx
,它将尝试读取字符串"srednica"
,这不是一个有效的数字,输入将失败并在输入流上设置fail
标志,使所有以下输入无效
如何使用std::transform
:
std::string s = "[332, 605]-[332, 592]";
std::cout << "Before: "" << s << ""n";
std::transform(std::begin(s), std::end(s), std::begin(s),
[](const char& ch) -> char
{
return (std::isdigit(ch) ? ch : ' ');
});
std::cout << "After : "" << s << ""n";
以上代码输出
<>之前以前:"[332,605]-[332,592]"后:"332 605 332 592"
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 使用 sstream 中的提升binary_iarchive进行序列化和反序列化
- 使用 sstream 序列化 std::map
- 如何将浮点值转换为字符串,而无需为arduino使用sstream
- 使用输入和输出文件Sstream
- 在mingw2.95编译器中使用sstream
- 使用 sstream 将 int 转换为 LPCTSTR 时出现奇怪的结果
- 关于 Sstream,使用变量作为数组大小和计算溢出
- 使用不带 #include <sstream>的 istringstream
- 将字符串转换为整数使用 sstream
- 为什么我会超时(使用sstream解析用逗号分隔的整数列表)
- 想要使用sstream解析int类型的字符串输入
- 从字符串中读取多个数据,使用sstream以字符分隔
- 使用sstream将std::string转换为int型
- 使用sstream in在ofstream中提供输出文件的名称
- XCODE:使用字符串流<sstream>时的链接问题
- 使用fstream和sstream一起从文件中分离字符串/整数
- 从使用sstream读取的单词中删除最后一个空格的最佳方法