1

入力からスペースを削除するにはどうすればよいですか?? 整数配列です。入力は次のようになります。

5 6 2 9
3 1 11 4

整数として受け取る必要があります。次に、バブルソートを使用して並べ替えます。問題は、次のような出力が得られることです。9 8 7 4 2 1 -858993460 -858993460 -858993460 -858993460

class inout
{
public : 
    int i[10];

    inout()
    {

    }

    void read()
    {
        ifstream inClientFile( "input.txt", ios::in );
        if ( !inClientFile )
            {
            cerr << "File could not be opened" << endl;
            exit( 1 );
            }
        int n=0;

        while (inClientFile >> i[n])
        {

            n++;
        }
        cout << " Data read complete" << endl;
    }

    void write()
    {
       ofstream outClientFile( "output.txt", ios::out ); 

       if ( !outClientFile ) {  
          cerr << "File could not be opened" << endl;
          exit( 1 );

       } 


        int n=0;
        for (int l=0 ; l < 10 ; l++)
        {
          outClientFile << i[l] << " " ;

        }   
        cout << " Data Write complete"  << endl;
    }

    void sortData(int asc )
    {
        int pos=0;
        int temp;
        temp = i[0];

        // asending 

        if (asc == 1)
        {
        for (int p = 0; p < 10 ; p ++ )
        {

        int pos=p;
        int temp2,temp = i[p];
            for (int j = p+1 ; j < 10 ; j ++ )
            {
                if (pos == p)
                {
                    if (i[p] > i[j])
                    {
                        pos = j;
                        temp = i[j];
                    }
                }
                else {
                    if (i[pos] > i[j])
                    {
                        pos = j;
                        temp = i[j];
                    }
                }
            }

            temp2 = i[pos];
            i[pos] = i[p];
            i[p] = temp2;
        }


    }
    else
    {
        for (int p = 0; p < 10 ; p ++ )
        {

        int pos=p;
        int temp2,temp = i[p];
            for (int j = p+1 ; j < 10 ; j ++ )
            {
                if (pos == p)
                {
                    if (i[p] < i[j])
                    {
                        pos = j;
                        temp = i[j];
                    }
                }
                else {
                    if (i[pos] < i[j])
                    {
                        pos = j;
                        temp = i[j];
                    }
                }
            }

            temp2 = i[pos];
            i[pos] = i[p];
            i[p] = temp2;
        }


    }
    }

};

int main()
{
    int d;


    inout x;
    x.read();
    cout<<"Press 1 to sort into ascending order"<<endl<<"Press any other key to sort into descending order"<<endl;
    cin>>d;
    x.sortData(d);  
    x.write();

}
4

3 に答える 3

0

問題はスペースではありません。ストリーム エクストラクタは、空白 (複数のスペース、改行、タブを含む) をセパレータとして扱います。

入力ループは読み取った値の数を慎重にカウントしますが、コードの残りの部分はそのカウントを無視します。入力サンプルには 8 つの要素がありますが、コードは 10 要素用にハードコーディングされています。配列の最後の 2 つの要素にはi意味のない値が含まれており、これが問題の原因となります。

于 2012-08-14T01:13:10.257 に答える
0

ifstream の rdbuf() メソッドを使用して、ファイルの内容全体を文字列に読み込むことができます。

std::ifstream in("myfile");

std::stringstream buffer;
buffer << in.rdbuf();

std::string contents(buffer.str());

次に、通常のstring操作トリックを使用して、整数を取得します。このようなもの:

istringstream iss(contents);
int x=0;
do{
x=0;
iss>>x;
}while(iss);
于 2012-08-14T16:06:23.423 に答える
0

inout::read()配列全体を常に並べ替えて出力するのではなく、実際に読み取られた入力数値の数を記録する必要があります。入力例には 8 つの数字がありますが、コードは常に 10 個の数字を並べ替えて出力します。

于 2012-08-14T00:41:31.760 に答える