C++项目第五次作业之文件的读取
前言
乍看题目,用文件读取数据,这不是很简单的事嘛ps:以前写单个.cpp就是用freopen读取数据,然而当开始写的时候就出现了问题(什么叫做实力作死,有一种痛叫too young too simple),因为第一次使用C++中的文件流fstream,不是很熟悉,所以出现各种bug,然后又各种debug,整个人都不好了!!!
传送门:
repository
information of problem
写在之前:因为西瓜犇犇贴出了我程序中的bug,于是我在某年某月某天走上了不归路,于某年某月某日卒于debug!(珍爱生命,远离debug->然而并不可能)
这里贴出自己处理不规范表达式(又臭又长 不要介意)的代码(赌5毛 肯定还有bug[笑着哭]):
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
//--------------------------------------------
	string input,temp="";
	int i,j,n,t;
//--------------------------------------------
int main()
{
 	freopen ( "xx.in ","r",stdin );
 	freopen ( "xx.out","w",stdout);
	cin >> input;
	int l=input.size();
	for (i=0;i<l;i++)
	{
		if (input[i] != '=')
			temp += input[i];
	}
	input = "";
	input = temp;
	cout << temp << endl << input << endl;
	for (i=0;i<l;i++)
	{
		if(input[i]=='(')
			n++;
		if(input[i]==')')
			t++;
	}
	if(n>t)
	{
		for (i = 0; i < n-t; i++)
		{
			input += ")";
		}
	}
	if(n < t)
	{
		for(i=0;i<t-n;i++)
			temp += "(";
		input=temp+input;
	}
	temp = "";
	l=input.size();
	for (i=0;i<l;i++)
	{
		if ((i+1)<l&&input[i]=='('&&input[i+1]=='(')
			temp+=input[i];
		else if((i+1)&&input[i]=='('&&input[i+1]<'0')
		{
			temp+=input[i];
			temp+="0";
		}
		else
			temp+=input[i];
	}
	l = temp.size();
	input="";
	for (i=0; i<l;i++)
	{
		if((i+1)<l&&((temp[i] >= '0' && temp[i+1] == '(') || (temp[i] == ')' && temp[i+1] >= '0')))
		{
			if (temp[i+1] == '=')
				continue;
			input += temp[i];
			input += "*";
		}
		else
			if((i+1) < l && temp[i] < '0' && temp[i+1] < '0' && temp[i] != temp[i+1] && temp[i] >= 42 && temp[i+1] >= 42)
		{
			input += temp[i];
			input += "(0";
			input += temp[++i];
			if(temp[++i] == '(')
			{
				n = 0;
				for ( i=i; i < l ; i++)
				{
					input += temp[i];
					if(temp[i]=='(')
					{
						n++;
					}
					if(temp[i]==')')
					{
						n--;
						if(n==0)
						    break;
					}
				}
				if (i<l)
					input += ")";
			}
			else
			{
				input += temp[++i];
				input += temp[++i];
				input += ")";
			}
		}
		else
			input += temp[i];
	}
	input += "=";
	cout << input << endl;
	return 0;
}
进入主题:
1.这次作业要求输出都在print类里面,这就要就在print类里动手脚,如下:
print.h区段
#ifndef PRINT_H
#define PRINT_H
#include <iostream>
#include <string>
#include "scan.h"
#include "calculate.h"
using namespace std;
/*创建Print类用来输出队列并定义类当中的函数*/
class Print
{
    public:
        Print();
        ~Print();
    void PrintStringQueue(string input);
	void Printanswer(string input);
	void Usedfile(string input, string read, string ans);
    private:
};
#endif
从头文件里就可以看出端倪,在print类里面分别写三个函数用来执行不同指令PrintStringQueue函数用来接收指令-a输出表达式及结果,Printanswer只输出结果,Usedfile接收指令-f,顾名思义就是用文件读取数据;
2.新的读取方式的添加:
main.cpp区段
#include <iostream>
#include <string>
#include "print.h"
using namespace std; 
int main(int argc, char* argv[])
{
	/*创建Print的对象p*/
	Print p;
	string input;
	input = argv[1];
	if (input == "-a")
	{
		input = argv[2];
		//调用Print类 输出队列和结果
		p.PrintStringQueue(input);                   
	}
	else
		if(input == "-f")
		{
			input = "";
			string write  = argv[2];
			string result = argv[3];
			p.Usedfile(input,write,result);
		}
	else
	{
		input = argv[1];
        	p.Printanswer(input);
	}
	return 0;
}
以上采用命令行输入的方式运行程序;


3.对项目的整体框架描述:

(没有下visor,自己瞎搞了框架图)结合main.cpp及print.h,整个项目以main函数为入口,通过不同的指令,调用print类里面的3个含参函数,然后在print类里面执行相应的指令,得出输出结果;
ps:待我下个visor,补个完整的给你!
补充的框架图:

END:
1.问题:写文件的时候遇到读不出文件的问题,在各路大神的点拨及自己debug中,逐步逐步的排查语句,最终解决问题;
2.收获:①虽然只是简单的文件输入输出,但是使用过程中仍需注意许多细节,还是初步学会了C++fstrem的简单使用;
②虽然自己调试了很久,浪费了很多时间和精力,但是最后,自己的debug能力还是有所提升,还是有所收获;
3.参考资料:
C++之文件IO操作流
未完待续~~~~~~~~to be continue!
C++项目第五次作业之文件的读取的更多相关文章
- 第五次作业——Alpha项目测试
		第五次作业——Alpha项目测试 格式描述: 这个作业属于哪个课程 2019秋软工17级系统分析与设计 这个作业要求在哪里 作业要求 团队名称 杨荣模杰和他的佶祥虎 这个作业的目标 测试其他组项目并写 ... 
- c++ 第五次作业(计算器第三步)
		第五次作业 (计算器第三步) 项目源文件地址:calculator 本次作业改进情况 加入多种读入选择 正常输出答案 -a 选项,输出表达式以及值 -f 选项,从指定文件读入,并把答案输出到指定文件 ... 
- 团队第五次作业——Alpha2
		一.相关信息 Q A 作业所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 作业要求 https: ... 
- 永远的Ace 实验五 团队作业2:XXX企业设施设备云上资料室
		项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu-da ... 
- React 实践项目 (五)
		React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ... 
- 17秋 软件工程 团队第五次作业 Alpha Scrum1
		题目:团队作业--Alpha冲刺 17秋 软件工程 团队第五次作业 Alpha Scrum1 各个成员在 Alpha 阶段认领的任务 伟航:督促和监督团队进度,协调组内合作 港晨:APP前端页面编写: ... 
- 17秋 软件工程 团队第五次作业 Alpha Scrum2
		17秋 软件工程 团队第五次作业 Alpha Scrum2 今日完成的任务 杰麟:Java后端的学习: 世强:登录和注册接口编写: 港晨:完成数据库表的设计: 树民.陈翔:完成超级管理员后端框架. 其 ... 
- 17秋 软件工程 团队第五次作业 Alpha Scrum3
		17秋 软件工程 团队第五次作业 Alpha Scrum3 今日完成的任务 杰麟:java后端学习: 世强:Android的部门基础信息模块的信息显示和对接后台: 港晨:后台管理登陆界面ui设计: 树 ... 
- 17秋 软件工程 团队第五次作业 Alpha Scrum4
		17秋 软件工程 团队第五次作业 Alpha Scrum4 今日完成的任务 世强:部门基础信息模块数据更新.部门审核提交: 港晨:设计编写登录界面的一部分: 树民:学习python基本语法.flask ... 
随机推荐
- angularjs 依赖注入原理与实现
			在用angular依赖注入时,感觉很好用,他的出现是 为了“削减计算机程序的耦合问题” ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个这么牛逼的功能.于是 ... 
- tr循环,每行 2个数相加 求出和位第三个数赋值   (http://jsfiddle.net/hgeL44rz/113/)
			<table id="tb"> <tr> <th>单价</th> <th>数量</th> <th> ... 
- js,需要更多源字符
			里面有的括号没写完 没有关闭 使整个js都不能用 vs2010安装个下面JS插件,更好的分层, https://marketplace.visualstudio.com/items?itemNam ... 
- 深入理解java虚拟机---4虚拟机类加载机制
			本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ... 
- Hibernate中查询优化策略
			Hibernate查询优化策略 ² 使用延迟加载等方式避免加载多余数据 ² 通过使用连接查询,配置二级缓存.查询缓存等方式减少select语句数目 ² 结合缓存机制,使用iterate()方法减少查询 ... 
- (mysql)找不到请求的 .Net Framework Data Provider。可能没有安装
			webconfig配置以下节点(注意版本号) <system.data> <DbProviderFactories> <add name="MySQL Data ... 
- 使用swiper 轮播插件ajax 请求加载图片时,无法滑动问题
			因为图片是动态创建的,在插件开始初始化时,文档流中没用图片,故没有创建相应宽度.通过调整js加载顺序,问题还是没有解决. 最后找到swiper插件 api 有属性是可以根据内容变动,自动初始化插件的, ... 
- js移动终端浏览器版本
			//当要在不同移动终端浏览器中运行不同的代码时,需要对各个终端浏览器进行判断 //判断浏览器 var browser = { versions: function () { var u = navig ... 
- IIS 部署 Python Django网站流程(受够了野路子)
			知道的,百度上搜出来的东西质量令人唏嘘.当你求助的时候多半还得靠自己,或者靠Google 介入正题,详细来一遍流程吧 当然,我是用Visual Studio 2019 来编辑开发Django项目的,如 ... 
- JS 面试题 实践一
			1.完成 extname 函数,它会接受一个文件名作为参数,你需要返回它的扩展名. 例如,输入 emoji.png,返回 .png. const extname = (filename) => ... 
