我想写一个把字符串转化为高精度数组的函数,用的是cin的>>的重载。
代码如下
#include <iostream>
#include <sstream>
#include <string>
#define rep(i,a,b) for (int i=a;i<=b;i++)
using namespace std;
const int N=1000;
struct high_precision{
int dat[N+1];
int size;
};
istream &operator >>(istream&,high_precision&);
ostream &operator <<(ostream&,high_precision);
high_precision a,b;
int main(){
freopen("a.txt","r",stdin);
cin>>a;
cout<<a;
}
istream &operator >>(istream &cin,high_precision &a){
string str;
stringstream ss;
int n;
cin>>str;
a.size=0;
while(str.length()>4){
n=str.length();
ss<<str.substr(n-4,4);
ss>>a.dat[++a.size];
str=str.substr(0,n-4);
}
ss<<str;
ss>>a.dat[++a.size];
return cin;
}
ostream &operator <<(ostream &cout,high_precision a){
rep(i,1,a.size)
cout<<a.dat[i];
return cout;
}
但是得到的答案却和我想要的不一样。
比如输入
1231254325
但是输出的却是432500
我调试了一下
是在这个部分出了问题
istream &operator >>(istream &cin,high_precision &a){
string str;
stringstream ss;
int n;
cin>>str;
a.size=0;
while(str.length()>4){
n=str.length();
ss<<str.substr(n-4,4);
ss>>a.dat[++a.size];
str=str.substr(0,n-4);
}
ss<<str;
ss>>a.dat[++a.size];
return cin;
}
利用ss转换类型,第一次正常转换了,第二次却是错误的,请问为什么呢?stringstream只可以使用一次么?
代码如下
#include <iostream>
#include <sstream>
#include <string>
#define rep(i,a,b) for (int i=a;i<=b;i++)
using namespace std;
const int N=1000;
struct high_precision{
int dat[N+1];
int size;
};
istream &operator >>(istream&,high_precision&);
ostream &operator <<(ostream&,high_precision);
high_precision a,b;
int main(){
freopen("a.txt","r",stdin);
cin>>a;
cout<<a;
}
istream &operator >>(istream &cin,high_precision &a){
string str;
stringstream ss;
int n;
cin>>str;
a.size=0;
while(str.length()>4){
n=str.length();
ss<<str.substr(n-4,4);
ss>>a.dat[++a.size];
str=str.substr(0,n-4);
}
ss<<str;
ss>>a.dat[++a.size];
return cin;
}
ostream &operator <<(ostream &cout,high_precision a){
rep(i,1,a.size)
cout<<a.dat[i];
return cout;
}
但是得到的答案却和我想要的不一样。
比如输入
1231254325
但是输出的却是432500
我调试了一下
是在这个部分出了问题
istream &operator >>(istream &cin,high_precision &a){
string str;
stringstream ss;
int n;
cin>>str;
a.size=0;
while(str.length()>4){
n=str.length();
ss<<str.substr(n-4,4);
ss>>a.dat[++a.size];
str=str.substr(0,n-4);
}
ss<<str;
ss>>a.dat[++a.size];
return cin;
}
利用ss转换类型,第一次正常转换了,第二次却是错误的,请问为什么呢?stringstream只可以使用一次么?