关于 类中的 流 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!jijijij

Lokioo 2003-03-29 12:47:46
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
class core
{
private:
ifstream in;//error 为什么在 agr 中无法使用???
vector<int>::iterator pos;
public :

core(const string &str){ifstream in(str);}//error !!!
~core(){in.close();}
void agr();
private:

void add(vector<int>& ,vector<int>&);
void sub(vector<int>& ,vector<int>&);
void mul(vector<int>&, vector<int>&);
void div (vector<int>&, vector<int>&);
};
void core::add(vector<int>& s1,vector<int>& s2)
{
cout<<endl;
for(int i=0;i<s2.size()-s1.size();i++)
cout<<" ";

for(pos=s1.begin();pos!=s1.end();pos++)
cout<<*pos;
cout<<endl;


cout<<'+';
for(int i=1;i<s1.size()-s2.size();i++)
cout<<" ";
for(pos=s2.begin();pos!=s2.end();pos++)
cout<<*pos;
cout<<endl;
cout<<"-------------------"<<endl;
vector<int>tmp;
int ii=s1.size();
int jj=s2.size();
while((ii>=0) &&(jj>=0)){
tmp.push_back(s1[ii--]+s2[jj--]);
}
while(ii>=0)
tmp.push_back(s1[ii--]);
while(jj>=0)
tmp.push_back(s2[jj--]);
for(pos=tmp.begin();pos!=tmp.end();pos++)
cout<<*pos;
cout<<endl;
}

void core::agr()
{
int n;
vector<int>s1;
vector<int>s2;
in>>n;
cout<<"the number of n=="<<n<<endl;
char y;
in>>y;
while((y>='0')&&(y<='9')){
s1.push_back(static_cast<int>(y)-48);
in>>y;
}
in>>y;
switch(y)
{
case '+': in>>y;
while((y>='0')&&(y<='9')){
s2.push_back(static_cast<int>(y)-48);
in>>y;
}
add(s1,s2);
break;
case'-':
break;
case'*':
break;
}
}

int main()
{ const string str="1103.txt";
core a(str);// 为什么文件无法打开
a.agr();
return 0;
}
//上面我已把出现问题的地方标出,,,谢谢帮助
...全文
53 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lokioo 2003-03-29
  • 打赏
  • 举报
回复
class core
{
private:
ifstream in;
vector<int>::iterator pos;
const string str;
public :

core(const string & s):str(s){ifstream in(str.c_str());//!!!!
~core(){in.close();}
void agr();
};
void core::agr()
{
ifstream in(str.c_str());//为什么文件还需要打开(我在构造函数中已经打开了?????)
..........
}

//难道这样封装文件 开关 不行!

//积极积极急急急急急!!!!!
Lokioo 2003-03-29
  • 打赏
  • 举报
回复
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
vector<int>s1;
vector<int>s2;
vector<int>::iterator pos;
void add(vector<int>& s1,vector<int>& s2)
{
cout<<endl;
cout<<' ';
if((s2.size()-s1.size())>0)
for(int i=0;i<s2.size()-s1.size()+1;i++)
cout<<" ";

for(pos=s1.begin();pos!=s1.end();pos++)
cout<<*pos;
cout<<endl;


cout<<'+';
if(s1.size()>s2.size())
for(int i=1;i<s1.size()-s2.size();i++)
cout<<" ";
for(pos=s2.begin();pos!=s2.end();pos++)
cout<<*pos;
cout<<endl;
cout<<"--------------"<<endl;
vector<int>tmp;
int ii=s1.size()-1;
int jj=s2.size()-1;
int t;

while((ii>=0) && (jj>=0)){
t=s1[ii--]+s2[jj--];
tmp.push_back(t%10);
if(t>=10){
if(ii>=0)
s1[ii]+=t/10;
else if(jj>=0)
s2[jj]+=t/10;
else
tmp.push_back(t/10);
}


}


while(ii>=0)
tmp.push_back(s1[ii--]);
while(jj>=0)
tmp.push_back(s2[jj--]);
cout<<' ';
for(pos=tmp.end()-1;pos!=tmp.begin()-1;pos--)// 问题点!!!!!!!!!
cout<<*pos;
cout<<endl;
}

void agr()
{
ifstream in("1103.txt");
int n;
in>>n;
cout<<"the number of n=="<<n<<endl;
string y;
in>>y;
int i=0;
while((y[i]>='0')&&(y[i]<='9')&&(y[i]!=NULL)){
s1.push_back(static_cast<int>(y[i++])-48);
}

switch(y[i++])
{
case'+':
while((y[i]>='0')&&(y[i]<='9')&&(y[i]!=NULL)){
s2.push_back(static_cast<int>(y[i++])-48);
}
add(s1,s2);
break;
case'-':
break;
case'*':
break;
}
}

int main()
{

agr();
return 0;
}
Lokioo 2003-03-29
  • 打赏
  • 举报
回复
呵呵~~~~~~~~~~~~~~~~

这道体的函数错误 多多 ,我没用类 进行了 调试..都快哭了 先列几个::
<error 1>::for(int i=0;i<s2.size()-s1.size();i++) //超界 如i<0 死循环
<error 2>::按位加计算 没有考虑进位位!!!!
<error 3>::vector 使用边界混乱,如 t=s1.size()--->s1[t] //越界!!!!
<error 4>::文件读取 无法判断 回车键!!!!!!造成无法完成题目要求!!!
<error 5>::ifstream 使用没有了解内部机制

//以上 这些问题在调试中解决... 只是对vector.push_back() 还有些迷惑
//贴出改正程序 希望大家帮我看看 add 中的 tmp 的push_back() 为什么边界有变化!!!
  • 打赏
  • 举报
回复
谢谢,chinajiji,其实是他提醒我的,只要
core(const string &str):in(str.c_str()){}就可以了,不用在生成一个临时对象了:)
chinajiji 2003-03-29
  • 打赏
  • 举报
回复
我来up一下.
  • 打赏
  • 举报
回复
对不起,标错了,改的是这行:)
for(int j=1;j<s1.size()-s2.size();j++)
  • 打赏
  • 举报
回复
void core::add(vector<int>& s1,vector<int>& s2)
{
cout<<endl;
for(int i=0;i<s2.size()-s1.size();i++)
cout<<" ";

for(pos=s1.begin();pos!=s1.end();pos++) //忘了说这里我也改了,因为在vc
cout<<*pos; //里,在for中定义的变量是可以
cout<<endl; //超出作用域的,如果你用bcb
//就没有这个问题

cout<<'+';
for(int j=1;j<s1.size()-s2.size();j++)
cout<<" ";
for(pos=s2.begin();pos!=s2.end();pos++)
cout<<*pos;
cout<<endl;
  • 打赏
  • 举报
回复
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
class core
{
private:
ifstream in;//error 为什么在 agr 中无法使用???
vector<int>::iterator pos;
public :

core(const string &str):in(ifstream(str.c_str())){}//改了
~core(){in.close();}
void agr();
private:

void add(vector<int>& ,vector<int>&);
void sub(vector<int>& ,vector<int>&);
void mul(vector<int>&, vector<int>&);
void div (vector<int>&, vector<int>&);
};
void core::add(vector<int>& s1,vector<int>& s2)
{
cout<<endl;
for(int i=0;i<s2.size()-s1.size();i++)
cout<<" ";

for(pos=s1.begin();pos!=s1.end();pos++)
cout<<*pos;
cout<<endl;


cout<<'+';
for(int j=1;j<s1.size()-s2.size();j++)
cout<<" ";
for(pos=s2.begin();pos!=s2.end();pos++)
cout<<*pos;
cout<<endl;
cout<<"-------------------"<<endl;
vector<int>tmp;
int ii=s1.size();
int jj=s2.size();
while((ii>=0) &&(jj>=0)){
tmp.push_back(s1[ii--]+s2[jj--]);
}
while(ii>=0)
tmp.push_back(s1[ii--]);
while(jj>=0)
tmp.push_back(s2[jj--]);
for(pos=tmp.begin();pos!=tmp.end();pos++)
cout<<*pos;
cout<<endl;
}

void core::agr()
{
int n;
vector<int>s1;
vector<int>s2;
in>>n;
cout<<"the number of n=="<<n<<endl;
char y;
in>>y;
while((y>='0')&&(y<='9')){
s1.push_back(static_cast<int>(y)-48);
in>>y;
}
in>>y;
switch(y)
{
case '+': in>>y;
while((y>='0')&&(y<='9')){
s2.push_back(static_cast<int>(y)-48);
in>>y;
}
add(s1,s2);
break;
case'-':
break;
case'*':
break;
}
}

int main()
{ const string str="1103.txt";
core a(str);// 为什么文件无法打开
a.agr();
return 0;
}

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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