一家软件公司上机面试题目c++程序员
来源:互联网 发布:六扇门调查知乎 编辑:程序博客网 时间:2024/06/09 19:59
题目:
打开文本文件a.txt,文件中的每一行都有一个数学表达式,将他们运算出来,以后保存到b.txt中。
如:
a.txt
1+2/3*4=
2+1*5-6=
b.txt
1
1
以上是题目要求。
下面是主要代码。
是通过递归的方法实现的。
// diguisuanfa.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
inline int IsDigit(char c)
{
return (c >= '0' && c <= '9') || c == '.';
}
string curr_token;
void NextToken(string& exp, int& curr)
{
char result[64] ={0};
int j = 0;
result[j++] = exp[curr++];
if (IsDigit(result[0])) while (IsDigit(exp[curr])) result[j++] += exp[curr++];
curr_token = result;
}
double Evalue1(string& exp, int& curr);
double Evalue2(string& exp, int& curr);
double Evalue3(string& exp, int& curr);
double Evalue4(string& exp, int& curr);
double Evalue(string& exp)
{
int curr = 0;
NextToken(exp, curr);
return Evalue1(exp, curr);
}
double Evalue1(string& exp, int& curr)
{
double left_value = Evalue2(exp, curr);
char ope;
while ((ope = curr_token[0]) == '+' || ope == '-')
{
NextToken(exp, curr);
double right_value = Evalue2(exp, curr);
switch (ope)
{
case '+':left_value+=right_value;break;
case '-':left_value-=right_value;break;
}
}
return left_value;
}
double Evalue2(string& exp, int& curr)
{
double left_value = Evalue3(exp, curr);
char ope;
while ((ope = curr_token[0]) == '*' || ope == '/')
{
NextToken(exp, curr);
double right_value = Evalue3(exp, curr);
switch (ope)
{
case '*':left_value*=right_value;break;
case '/':left_value/=right_value;break;
}
}
return left_value;
}
double Evalue3(string& exp, int& curr)
{
char ope;
double value;
if ((ope = curr_token[0]) == '+' || ope == '-')
{
NextToken(exp, curr);
value = Evalue4(exp, curr);
if (ope == '-') value = -value;
}
else
{
value = Evalue4(exp, curr);
}
return value;
}
double Evalue4(string& exp, int& curr)
{
double value = 0;
if (IsDigit(curr_token[0]))
{
value = atof(curr_token.c_str());
}
else if (curr_token[0] == '(')
{
NextToken(exp, curr);
value = Evalue1(exp, curr);
}
NextToken(exp, curr);
return value;
}
int main(void)
{
//=================================
string exp = "12*(3+5)+4/(6-2)";
cout << Evalue(exp) << endl;
//==================================
char szifile[256];
char szofile[256];
cout<<"请输要打开源文件名字:"<<endl;
cin>>szifile;
cout<<szifile<<endl;
ifstream i_file;
i_file.open(szifile,ios::in);
if (!i_file)
{
cout<<"源文件创建失败"<<endl;
return 1;
}
cout<<"请输入存放文件的文件名字:"<<endl;
cin>>szofile;
cout<<szofile<<endl;
ofstream ofile;
ofile.open(szofile,ios::out);
if (!ofile)
{
cout<<"源文件打开失败!"<<endl;
return 1;
}
char str[256];
int i = 0;
while (!i_file.eof())
{
i_file.getline(str,sizeof(str),'/n');
cout<<str<<endl;
string temp_exp = str;
cout << Evalue(temp_exp)<<endl;
int temp_i=Evalue(temp_exp);
//===============store b.txt======
ofile<<str<<temp_i<<endl;
//===============store b.txt======
cout<<i<<endl;
i++;
}
i_file.close();
ofile.close();
//==================================
return 0;
}
//程序下载地址:http://download.csdn.net/source/1462461
编译环境:VC++6.0 操作系统XP2
- 一家软件公司上机面试题目c++程序员
- 一家公司程序员面试题目
- 一家公司程序员面试题目
- 准备面试---izensoft一家软件公司
- 一家公司面试题目
- 某软件公司面试题目
- 某软件公司的面试题目
- C++面试上机面试题目
- 廊坊的 一家 软件公司
- 美资软件公司JAVA工程师电话面试题目
- JAVA程序员面试题目
- linux程序员面试题目
- JAVA程序员面试题目
- c++程序员面试题目
- .NET程序员 面试题目
- C/C++ 程序员常见面试题目深入剖析
- 我是个程序员 大学刚毕业去一家公司面试
- c语言面试题目
- struts2中文乱码解决方法
- 多项式回归
- 单点登录(SSO)的实现—通行证的基本原理
- 进销存练习前台界面完成
- Hibernate中的cascade和inverse
- 一家软件公司上机面试题目c++程序员
- Getmemory经典
- 韩少功:怎么赚钱
- Mysql 的 Cascade Restrict
- sql语句总结
- asp.net 成员角色管理
- mysql 数据库表的类型
- Type=MyISAM CHARACTER SET utf8 解说
- 按钮 运行代码 复制代码 保存代码