我有一个如下所示的输入文件:
3 2
5 1
3 0
XXX
2 1
3 0
我需要分别读取每个整数,将其放入多项式中。 “XXX”表示第二个多项式将从何处开始。基于上面的例子,第一个多项式将是3x ^ 2 + 5x ^ 1 + 3x ^ 0,第二个多项式将是2x ^ 1 + 3x ^ 0。
#include <iostream>
#include <iomanip>
#include <fstream>
#include "PolytermsP.h"
using namespace std;
int main()
{
// This will be an int
coefType coef;
// This will be an int
exponentType exponent;
// Polynomials
Poly a,b,remainder;
// After "XXX", I want this to be true
bool doneWithA = false;
// input/output files
ifstream input( "testfile1.txt" );
ofstream output( "output.txt" );
// Get the coefficient and exponent from the input file
input >> coef >> exponent;
// Make a term in polynomail a
a.setCoef( coef, exponent );
while( input )
{
if( input >> coef >> exponent )
{
if( doneWithA )
{
// We passed "XXX" so start putting terms into polynomial B instead of A
b.setCoef( exponent, coef );
} else {
// Put terms into polynomail A
a.setCoef( exponent, coef );
}
}
else
{
// Ran into "XXX"
doneWithA = true;
}
}
我遇到的问题是多项式A(XXX之前的值)的值是有效的,但不适用于B.
我要问的是:当我遇到“XXX”时如何才能这样做我可以将“doneWithA”设置为true,并继续阅读“XXX”后的文件?
答案 0 :(得分:1)
我会把它们放在单独的循环中,因为你知道只有两个而且只有两个:
coefType coef; // This will be an int
exponentType exponent; // This will be an int
Poly a,b;
ifstream input( "testfile1.txt" );
while( input >> coef >> exponent )
a.setCoef( exponent, coef );
input.clear();
input.ignore(10, '\n');
while( input >> coef >> exponent )
b.setCoef( exponent, coef );
//other stuff
答案 1 :(得分:0)
我认为最简单的方法是始终将输入作为字符串读取,然后应用atoi(),http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/ 如果此函数失败,那么您已达到一个不是数字的字符串,即“xxx”。
答案 2 :(得分:0)
const string separator("XXX");
while(input){
string line;
getline(input,line);
if(line == separator)
doneWithA = true;
else {
istringstream input(line);
if(input >> coef >> exponent){
if(doneWithA)
b.setCoef( coef, exponent );
else
a.setCoef( coef, exponent );
}
}
}