c++读取三行txt,每一行分别存入相应的指定vector

young_kuang 2013-11-11 12:23:35

C++ 的一个基础问题。。
读取data.txt,文件里面含有三行数字,每行数字个数不限,怎么将他们分别读出存入到的三个vector,v1,v2,v3中?。。原谅我吧,新手一枚
...全文
380 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
young_kuang 2013-11-11
  • 打赏
  • 举报
回复
引用 11 楼 JiMoKuangXiangQu 的回复:
[quote=引用 8 楼 u012779980 的回复:] [quote=引用 7 楼 JiMoKuangXiangQu 的回复:]
double d = std::strtod(v1[0].c_str(), &stop);
是这个意思吗?
是想把整个vector都变成可操作的[/quote] 是这个意思不?
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric>

using namespace std;


int main()
{
	vector<double> v1, v2, v3;
	string line;
	int lineno = 0;
	char *stop;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(strtod(line.c_str(), &stop)); break;
		case 1: v2.push_back(strtod(line.c_str(), &stop)); break;
		case 2: v3.push_back(strtod(line.c_str(), &stop)); break;
		}

		lineno++;
	}

	// result = v1 + v2
	vector<double> result(v1.size(), 0 );
	transform(v1.begin(), v1.end(), v2.begin(), result.begin(), plus<double>());

	// print:
	// v1 
	// + 
	// v2
	// = 
	// result
	//
	vector<double>::const_iterator it;
	for (it = v1.begin(); it != v1.end(); it++)
		cout << *it << endl;
	cout << "+" << endl;
	for (it = v2.begin(); it != v2.end(); it++)
		cout << *it << endl;
	cout << "=" << endl;
	for (it = result.begin(); it != result.end(); it++)
		cout << *it << endl;

	return 0;
}
[/quote] 不行啊。。。回来我自己运行后发现只能显示读取第一个数字啊
modyaj 2013-11-11
  • 打赏
  • 举报
回复
存到同一个vector中也很好啊!毕竟数据类型都相同
JiMoKuangXiangQu 2013-11-11
  • 打赏
  • 举报
回复
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;


int main()
{
	vector<string> v1, v2, v3;
	string line;
	int lineno = 0;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(line); break;
		case 1: v2.push_back(line); break;
		case 2: v3.push_back(line); break;
		}

		lineno++;
	}

	return 0;
}
供参考。
Sky丶Memory 2013-11-11
  • 打赏
  • 举报
回复
#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
#include<string>
using namespace std;
int main()
{
	vector<int> v1,v2,v3;
	string temp;
	ifstream fin("data.txt");
	while(getline(fin,temp))
	{
		istringstream temp1(temp);
		while(temp1 >> temp)
		{
			v1.push_back(temp);
		}
	}
	return 0;
}		
上面只是一种情况,你可以试下其他的
young_kuang 2013-11-11
  • 打赏
  • 举报
回复
引用 11 楼 JiMoKuangXiangQu 的回复:
[quote=引用 8 楼 u012779980 的回复:] [quote=引用 7 楼 JiMoKuangXiangQu 的回复:]
double d = std::strtod(v1[0].c_str(), &stop);
是这个意思吗?
是想把整个vector都变成可操作的[/quote] 是这个意思不?
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric>

using namespace std;


int main()
{
	vector<double> v1, v2, v3;
	string line;
	int lineno = 0;
	char *stop;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(strtod(line.c_str(), &stop)); break;
		case 1: v2.push_back(strtod(line.c_str(), &stop)); break;
		case 2: v3.push_back(strtod(line.c_str(), &stop)); break;
		}

		lineno++;
	}

	// result = v1 + v2
	vector<double> result(v1.size(), 0 );
	transform(v1.begin(), v1.end(), v2.begin(), result.begin(), plus<double>());

	// print:
	// v1 
	// + 
	// v2
	// = 
	// result
	//
	vector<double>::const_iterator it;
	for (it = v1.begin(); it != v1.end(); it++)
		cout << *it << endl;
	cout << "+" << endl;
	for (it = v2.begin(); it != v2.end(); it++)
		cout << *it << endl;
	cout << "=" << endl;
	for (it = result.begin(); it != result.end(); it++)
		cout << *it << endl;

	return 0;
}
[/quote] 对的!多谢了,,

v1.push_back(strtod(line.c_str(), &stop))
JiMoKuangXiangQu 2013-11-11
  • 打赏
  • 举报
回复
引用 8 楼 u012779980 的回复:
[quote=引用 7 楼 JiMoKuangXiangQu 的回复:]
double d = std::strtod(v1[0].c_str(), &stop);
是这个意思吗?
是想把整个vector都变成可操作的[/quote] 是这个意思不?
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric>

using namespace std;


int main()
{
	vector<double> v1, v2, v3;
	string line;
	int lineno = 0;
	char *stop;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(strtod(line.c_str(), &stop)); break;
		case 1: v2.push_back(strtod(line.c_str(), &stop)); break;
		case 2: v3.push_back(strtod(line.c_str(), &stop)); break;
		}

		lineno++;
	}

	// result = v1 + v2
	vector<double> result(v1.size(), 0 );
	transform(v1.begin(), v1.end(), v2.begin(), result.begin(), plus<double>());

	// print:
	// v1 
	// + 
	// v2
	// = 
	// result
	//
	vector<double>::const_iterator it;
	for (it = v1.begin(); it != v1.end(); it++)
		cout << *it << endl;
	cout << "+" << endl;
	for (it = v2.begin(); it != v2.end(); it++)
		cout << *it << endl;
	cout << "=" << endl;
	for (it = result.begin(); it != result.end(); it++)
		cout << *it << endl;

	return 0;
}
young_kuang 2013-11-11
  • 打赏
  • 举报
回复
[quote=引用 9 楼 zhao4zhong1 的回复:] 啥叫不限?100000000000000000000000000000000000个?[/quote 就是不知道多少个
赵4老师 2013-11-11
  • 打赏
  • 举报
回复
啥叫不限?100000000000000000000000000000000000个?
young_kuang 2013-11-11
  • 打赏
  • 举报
回复
引用 7 楼 JiMoKuangXiangQu 的回复:
double d = std::strtod(v1[0].c_str(), &stop);
是这个意思吗?
是想把整个vector都变成可操作的
JiMoKuangXiangQu 2013-11-11
  • 打赏
  • 举报
回复
double d = std::strtod(v1[0].c_str(), &stop);
是这个意思吗?
young_kuang 2013-11-11
  • 打赏
  • 举报
回复
引用 5 楼 JiMoKuangXiangQu 的回复:
[quote=引用 4 楼 u012779980 的回复:] [quote=引用 2 楼 JiMoKuangXiangQu 的回复:]
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;


int main()
{
	vector<string> v1, v2, v3;
	string line;
	int lineno = 0;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(line); break;
		case 1: v2.push_back(line); break;
		case 2: v3.push_back(line); break;
		}

		lineno++;
	}

	return 0;
}
供参考。
怎么把string类型vector转化为double呢。。??[/quote]
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;


int main()
{
	vector<string> v1, v2, v3;
	string line;
	int lineno = 0;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(line); break;
		case 1: v2.push_back(line); break;
		case 2: v3.push_back(line); break;
		}

		lineno++;
	}

	char *stop;
	cout << std::strtod(v1[0].c_str(), &stop) << endl;
	cout << std::strtod(v2[0].c_str(), &stop) << endl;
	cout << std::strtod(v3[0].c_str(), &stop) << endl;

	return 0;
}
data.txt:
123.65
1241231.23
895480305.08
输出:
123.65
1.24123e+006
8.9548e+008
[/quote] 多谢,,我想知道能不能直接读取v1的数据用于计算,比如说计算v1 + v2如果v1,v2长度相同的话
JiMoKuangXiangQu 2013-11-11
  • 打赏
  • 举报
回复
引用 4 楼 u012779980 的回复:
[quote=引用 2 楼 JiMoKuangXiangQu 的回复:]
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;


int main()
{
	vector<string> v1, v2, v3;
	string line;
	int lineno = 0;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(line); break;
		case 1: v2.push_back(line); break;
		case 2: v3.push_back(line); break;
		}

		lineno++;
	}

	return 0;
}
供参考。
怎么把string类型vector转化为double呢。。??[/quote]
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;


int main()
{
	vector<string> v1, v2, v3;
	string line;
	int lineno = 0;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(line); break;
		case 1: v2.push_back(line); break;
		case 2: v3.push_back(line); break;
		}

		lineno++;
	}

	char *stop;
	cout << std::strtod(v1[0].c_str(), &stop) << endl;
	cout << std::strtod(v2[0].c_str(), &stop) << endl;
	cout << std::strtod(v3[0].c_str(), &stop) << endl;

	return 0;
}
data.txt:
123.65
1241231.23
895480305.08
输出:
123.65
1.24123e+006
8.9548e+008
young_kuang 2013-11-11
  • 打赏
  • 举报
回复
引用 2 楼 JiMoKuangXiangQu 的回复:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;


int main()
{
	vector<string> v1, v2, v3;
	string line;
	int lineno = 0;

	ifstream infile("data.txt");
	while (getline(infile, line))
	{
		switch (lineno) {
		case 0: v1.push_back(line); break;
		case 1: v2.push_back(line); break;
		case 2: v3.push_back(line); break;
		}

		lineno++;
	}

	return 0;
}
供参考。
怎么把string类型vector转化为double呢。。??

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧