zoukankan      html  css  js  c++  java
  • 《面向对象程序设计》第五次作业(指定路径读取计算表达式+项目框架图)

    作业要求:

    • 如果第一个参数为表达式,只输出表达式的结果;
    • 如果第一个参数为“-a”,第二个为表达式,将表达式输出;
    • 如果第一个参数为“-f”,第二个为txt文件的路径,则从该文件中读取表达式(每个表达式一行,有多行),并将答案输出到第三个参数的路径上

    ->代码已上传

    前两个要求在上次作业已经实现,这次其实只要实现第三个功能。

    主要代码:

    step1:读取和判断

        string read;
    	bool flag1 = false,flag2 = false,flag3 = false;
    
    	//参数有-a
    	if(strcmp(argv[1],"-a") == 0)
    	{
    		read = argv[2];
    		flag2 = true;
    	}
    	//参数有-f
    	else if(strcmp(argv[1],"-f") == 0)
    	{
    		flag3 = true;
    	}
    	//无指定类型参数
    	else
    	{
    		read = argv[1];
    		flag1= true;
    	}
    

    step2:计算

        //读写文件方式计算输出
    	if(flag3)
    	{
    		ifstream fin(argv[2]);
    		while(!fin.eof())
    		{
    			getline(fin,read,'
    ');
    
    			q = scan->ToStringQueue(read);  //获取目标队列
    			Calculation *calculation = new Calculation(q);
    			calculation->trans(q);  //转化为后缀表达式
    			theResult = calculation->calcu();
    			print->fPrint(argv[3],theResult);//输出结果
    
    			delete(calculation);
    		}
    
    		fin.close();
    	}
    
    	//直接打印输出
    	else
    	{
    		q = scan->ToStringQueue(read);  //获取目标队列
    		Calculation *calculation = new Calculation(q);
    		calculation->trans(q);  //转化为后缀表达式
    		theResult = calculation->calcu();
    
    
    		//直接输出运算结果
    		if(flag1)
    		{
    			print->nPrint(theResult);
    		}
    		//输出表达式和运算结果
    		else if(flag2)
    		{
    			print->aPrint(argv[2],theResult);
    		}
    		delete(calculation);
    	}
    

    step3:print类中实现输出

            void Print::nPrint(double re)
            {
    	        cout << re;
            }
    
            void Print::aPrint(string s,double re)
            {
    	        cout << s <<" "<<re;
            }
    
            void Print::fPrint(char *s,double re)
            {
    	        ofstream fout(s,ofstream::app);
    	        fout << re <<endl;
    	        fout.close();
            }
    

    c语言中读写文件的freopen方法其实在平时打题的时候我还是蛮常用的..所以想借此机会学习一下c++读写文件的方式,fstream库函数。虽然正是因为初学花了蛮多时间调试各种,但也还是有了一定的收获w
    1.学习了ftream的一些基本的输入输出流用法,代码中是定义ifstream和ofstream对象直接实现,(看别处的代码调用open()方法的好像比较少,这样好像也更方便些所以就没有用open()..
    2.在从文件中读取多行表达式的时候出现了输出结果被覆盖的问题。后面加上了ofstream:app后成功。(直接写入文件默认在文件头写入..加上app会在保留已存在的文件情况下在文件末尾写入,ate也是在文件末尾写入但没有保留已有文件内容)
    3.无意中知道了flush这个东西(将缓冲区的内容马上输出并且把输出缓冲区刷新),平时用的endl包括了输出一个回车" "和flush

    调试截图


    (以及一个不太懂是什么的框架图)

    参考资料:
    C++读写文件总结
    ofstream(不会就查API不会就查API不会就查API!!)

  • 相关阅读:
    Balanced Binary Tree
    Minimum Depth of Binary Tree
    Path Sum
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Chp3: Stacks and Queue
    Chp2: Linked List
    Populating Next Right Pointers in Each Node
    Valid Palindrome
    Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/thousfeet/p/5475725.html
Copyright © 2011-2022 走看看