0

私はクラスを持っています:

class Piece{

    public: 
        void print();

    private:
        string piece_name_;

        int top_;
        int right_;
        int lower_;
        int left_;

        string piece_;

};

たとえば、この
A/! のように、パズルピースについて説明します。
+␣!
C!

各面には番号があります (上、右...)

この作品を印刷する関数を作成しましたが、次のように 2 つの作品を並べて印刷する方法が必要です
/-␣HDA
!R!IEB
-/JFC

この問題にアプローチする方法を知っている人はいますか?

void Piece::print(){

    for(string::size_type i = 0; i < piece_.size(); ++i){
        cout << piece_.at(i);
        if(i == 2 or i == 5 or i == 8){
            cout << endl;
        }
    }
}
4

3 に答える 3

0

別の問題として、文字列 (または文字列) への変換は、印刷とは別にする必要があります。次に、いくつかの部分を文字列に変換してから、好きなように印刷できます。

于 2013-10-29T17:42:08.160 に答える
0

「A/!」のような駒の情報がわかりません。を表しますが、非メンバー関数を使用して 2 つの部分を出力できます

void printTwoPieces(Piece a, Piece b) {
  a.print();
  b.print();
  cout << endl;
}

return;また、特定の場合にのみ改行を出力する必要がない限り、Piece::print() の if ステートメントを に置き換える必要があります。次に、問題が十分に詳細に説明されていません。

于 2013-10-29T17:38:47.333 に答える
0

まず、私がやりたいと思っていることが、 にPiece::print直接書き込むことではできませんstd::cout。のようなストリーム挿入演算子を記述することから始めstd::ostream& operator<<(std::ostream&, Piece const&)ます。

次に、2 つの部分を制御する文字列にフォーマットできます。

void format_pieces(Piece const &p1, Piece const &p2) {
  std::stringstream s1, s2;
  s1 << p1;
  s2 << p2;

最後に、各行を連結できます。

于 2013-10-29T17:47:37.873 に答える