Чтение целых чисел из файла со строкой между - PullRequest
2 голосов
/ 04 октября 2011

У меня есть входной файл, который выглядит следующим образом:

3 2
5 1
3 0
XXX
2 1
3 0

Мне нужно прочитать каждое целое число отдельно, поместив его в полином.«ХХХ» обозначает начало второго полинома.Исходя из приведенного выше примера, первый полином будет 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"?

Ответы [ 3 ]

1 голос
/ 05 октября 2011

Я бы поместил их в отдельные циклы, поскольку вы знаете, что их два и только два:

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
0 голосов
/ 05 октября 2011
    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 );
            }
        }
    }
0 голосов
/ 05 октября 2011

Я думаю, что самый простой способ сделать это - всегда читать ввод как строку и затем применять atoi (), http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/ Если эта функция не работает, значит, вы достигли строки, которая не является числом, т. Е. "Xxx".

...