我刚刚开始练习复杂的任务,但在构建复杂系统时仍然遇到了麻烦。所以不要评判太苛刻
一个任务:
1- 从 txt 文件中读取几行(参见示例)并将它们转换为(分别为 3 个)单独的向量;
2-考虑不同的“标点符号”(见示例);
我无法通过函数将翻译逻辑正确写入向量。发布的代码版本会读取整个第一个数组,并逐个读取第一个知道的下一个数组。
txt 示例
一个文件有 3 行。
1 2 3 4 5 6 7 8 9 10
11,12,13,14,15,16,17
21、22、23、24、25
- 不同长度
- 数字是整数,可以是随机的(我选择了一个简单的例子)
- 数字分隔类型:PASS、COMA、COMA + PASS
编码
#include<iostream>
#include<vector>
#include<string>
#include<fstream>
#include<algorithm>
#include<sstream>
std::vector<int>Read_Func(const std::string file_name, const char symbol) {
std::string str;
std::vector<int>vec_int_tmp;
std::ifstream in_file(file_name, std::ios::in | std::ios::binary);
while (!in_file.eof()) {
getline(in_file, str, '\r');
std::stringstream iss(str);
if (symbol==' ') {
int num;
while (iss >> num)
vec_int_tmp.push_back(num);
}
if (symbol==',') {
std: :replace(str.begin(), str.end(), ',', ' ');
int num;
while (iss >> num)
vec_int_tmp.push_back(num);
}
if (symbol==', ') {
std: :replace(str.begin(), str.end(), ',', ' ');
int num;
while (iss >> num)
vec_int_tmp.push_back(num);
}
count++;
}
//Print Messages (Error and others)
in_file.close();
return vec_int_tmp;
}
int main() {
std::string file_name {"C:/.../Given_array.txt"};
std::vector<int>vec_space;
std::vector<int>vec_both;
std::vector<int>vec_coma;
vec_space=Read_Func(file_name, ' ');
vec_coma=Read_Func(file_name, ',');
vec_both=Read_Func(file_name, ', ');
}
>>> 更新 <<<
最终代码如下所示。特别感谢哈利。
std::vector<std::vector<int>> readFile(std::istream& in)
{
std::vector<std::vector<int>> v;
std::string buf;
while (getline(in, buf))
{
replace(buf.begin(), buf.end(), ',', ' ');
std::istringstream is(buf);
std::vector<int> b;
copy(std::istream_iterator<int>(is), std::istream_iterator<int>(),
back_inserter(b));
v.push_back(b);
}
return v;
}
int main() {
std::string file_name{ "C:/.../Given_array.txt" };
std::ifstream in_file;
in_file.open(file_name, std::ios_base::in);
std::vector<std::vector<int>> vec_int;
vec_int = readFile(in_file);
}
像这样的东西 - 以向量的向量的形式: