从文件中的一行读取特定数据-C++
Reading specific data from a line in a file - C++
我有一个.txt文件,如下所示:
(P1, 3): (E10, E20, E1, E3)
(P2, 2): (E10, E20, E2, E5)
(P3, 2): (E10, E20)
我只想保存数组中每行的数字。第一个应该是[1,3,10,0,1,3]。我该怎么做?
使用ifstream逐行遍历读取文件。
将字符串读取为std::字符串后,使用regex搜索来查找新读取的字符串中数字的出现次数。
要用于提取字符串中所有数字的正则表达式如下:
https://regex101.com/r/yWJp5p/3
使用示例:
#include <regex>
#include <iostream>
#include <string>
std::vector<std::string> fetchMatches(std::string str, const std::regex re) {
std::vector<std::string> matches;
std::smatch sm; // Use to get the matches as string
while (regex_search(str, sm, re)) {
matches.push_back(sm.str());
str = sm.suffix();
}
return matches;
}
int main() {
std::string example_input = "(P1, 3): (E10, E20, E1, E3)";
std::regex re{"\d+"};
auto matches = fetchMatches(example_input, re);
for (const auto& match : matches) {
std::cout << match << std::endl;
}
return 0;
}
有多种解决方案。解释其中一个解决方案。
利用C.的isDigit和strtol函数
char *str = "(P1, 3): (E10, E20, E1, E3)", *p = str;
while (*p) {
if ( isdigit(*p)) {
long val = strtol(p, &p, 10);
printf("%ldn", val);
} else {
p++;
}
}
注意:如果文件中有负数,则需要进行检查。
只需在if条件中添加((*p=='-'||*p=='+') && isdigit(*(p+1)))
即可。
相关文章:
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 使用std::getline()读取一行
- C++ : 如何在使用 getline() 和 ifstream 对象从文件中读取一行时跳过第一个空格?
- 如何从文本文件中读取一行并将其分为不同的变量
- 使用 getline 从输入文件读取一行到输出文件
- 如何在文本文件中仅读取一行,该文本文件使用QT具有特定单词
- 无法弄清楚为什么只从文件中读取一行矩阵以及为什么我无法将 2D 数组传递给函数
- 如何从文件中读取一行中的特定字符
- c++从ifstream中读取一行的最后一个变量
- 无法从文件中读取一行的所有整数(ifstream)
- 从文件中读取一行并将其放入字符串中(使用 fstream)
- 从.txt文件中读取一行,然后插入变量
- 从文件中读取一行,并在其中搜索字符串(c++)
- 在c++中读取一行.txt文件的一部分
- 我无法使用 getline() 读取一行
- std::getline只读取一行:
- 启动 QProcess 并一次读取一行输出
- C++以int形式读取一行字符串
- 在C++中读取一行之后的行不起作用