<<演算子をオーバーロードして ""を "\ n"に変更します

Brij Raj Kishore

過負荷にしようとしています

<<

オペレーター。例えば

cout << a << "" << b << ""; //この行を変更することは許可されていません

私はそれをフォーマットで印刷しなければなりません

<literal_valueof_a><"\n>
<literal_valueof_b><"\n">
<"\n">

文字列を引数として<<演算子をオーバーロードしようとしましたが、機能しません。だから私は文字通りだと思います

「」

文字列ではありません。そうでない場合、それは何ですか。そしてそれを過負荷にする方法は?親切に助けてください。

完全なコード

//Begin Program
// Begin -> Non - Editable     
    #include <iostream>
    #include <string>
    using namespace std;

// End -> Non -Editable
//---------------------------------------------------------------------
// Begin -> Editable       (I have written )
    ostream& operator << (ostream& os, const string& str) {
        string s  = " ";
        if(str  ==  " ") {
            os << '\n';
        }
        else {
            for(int i = 0; i < str.length(); ++i)
                os << str[i];
        }
        return os;
    }

// End -> Editable
//--------------------------------------------------------------------------
// Begin -> No-Editable     
int main() {
        int a, b;
        double s, t;
        string mr, ms;
        cin >> a >> b >> s >> t ;
        cin >> mr >> ms ;
        cout << a << " " << b << " " ;
        cout << s << " " << t << " " ;
        cout << mr << " " << ms ;

        return 0;
    }
// End -> Non-Editable
//End Program

入力と出力入力

 30 20 5.6 2.3 hello world 

出力

30
20
5.6
2.3
hello
world
デデュプリケーター

" "は長さ1の文字列リテラルであるため、タイプはconst char[2]です。std::string関係ありません。

したがって、理論的には、次のようにオーバーロードできます。

auto& operator<<(std::ostream& os, const char (&s)[2]) {
    return os << (*s == ' ' && !s[1] ? +"\n" : +s);
}

それは他のすべての過負荷に勝るが、今では物事は本当に毛むくじゃらになる。問題はsome_ostream << " "、テンプレートであっても珍しいことではなく、標準関数の呼び出しに解決されなくなったことです。これらのテンプレートは、影響を受ける翻訳単位と影響を受けない翻訳単位で定義が異なるため、単一定義規則に違反します。

あなたがすべきことは、非常に局所的な問題にグローバルな解決策を適用しようとしないことです。

できれば、現在スペース文字をストリーミングしているコードを変更してください。
または、必要に応じて改行に変換する独自のストリームバッファを作成します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python演算子 "<<"をC ++ iostreamとしてオーバーロードします

分類Dev

Pythonで[]演算子をオーバーロードしますか?

分類Dev

演算子をオーバーロードしない変換演算子

分類Dev

演算子<<をオーバーロードしてリストを表示する方法

分類Dev

オーバーロードされた演算子を使用して別の演算子のオーバーロードを実装しても大丈夫ですか?

分類Dev

演算子をオーバーロードしない

分類Dev

演算子のオーバーロード=元のオブジェクトを変更します

分類Dev

<<演算子をオーバーロードしてemp.nameを出力しようとしています

分類Dev

演算子>>オーバーロードエラーを解決する方法(「演算子>>」に一致しません)

分類Dev

C ++は新しい演算子を作成し、現在の演算子をオーバーロードします

分類Dev

Boost.Logの演算子<<を適切にオーバーロードします

分類Dev

これをオーバーロードされた<<演算子に渡します

分類Dev

<map>に格納したいクラスの "<"演算子をオーバーロードしています

分類Dev

演算子のオーバーロードを使用して配列のユニオンを取得するには?

分類Dev

クラステンプレートにoperator +を使用して追加をオーバーロードする演算子

分類Dev

C ++での演算子のオーバーロードは本当に戻り値を期待していますか?

分類Dev

オーバーロードされた演算子を使用してパッケージをビルドする

分類Dev

Javaは演算子のオーバーロードをサポートしていますか?

分類Dev

テンプレート演算子[]が奇妙なC2676をオーバーロードしています

分類Dev

それで.... Javaは演算子のオーバーロードをサポートしていますか?

分類Dev

+および+ =演算子を非メンバー関数としてオーバーロードする方法は?

分類Dev

JavaScriptで算術演算子をオーバーロードしますか?

分類Dev

演算子のオーバーロード= std :: sortを壊します

分類Dev

括弧演算子のオーバーロードは何をしますか?

分類Dev

newおよびdelete演算子をオーバーロードします

分類Dev

List <object>のBracket []演算子をオーバーロードします

分類Dev

C ++でインクリメント演算子をオーバーロードしようとしています

分類Dev

オーバーロード演算子<< c ++、クラスの要素をcoutしようとしています

分類Dev

行列の*演算子をオーバーロードしようとしています

Related 関連記事

  1. 1

    Python演算子 "<<"をC ++ iostreamとしてオーバーロードします

  2. 2

    Pythonで[]演算子をオーバーロードしますか?

  3. 3

    演算子をオーバーロードしない変換演算子

  4. 4

    演算子<<をオーバーロードしてリストを表示する方法

  5. 5

    オーバーロードされた演算子を使用して別の演算子のオーバーロードを実装しても大丈夫ですか?

  6. 6

    演算子をオーバーロードしない

  7. 7

    演算子のオーバーロード=元のオブジェクトを変更します

  8. 8

    <<演算子をオーバーロードしてemp.nameを出力しようとしています

  9. 9

    演算子>>オーバーロードエラーを解決する方法(「演算子>>」に一致しません)

  10. 10

    C ++は新しい演算子を作成し、現在の演算子をオーバーロードします

  11. 11

    Boost.Logの演算子<<を適切にオーバーロードします

  12. 12

    これをオーバーロードされた<<演算子に渡します

  13. 13

    <map>に格納したいクラスの "<"演算子をオーバーロードしています

  14. 14

    演算子のオーバーロードを使用して配列のユニオンを取得するには?

  15. 15

    クラステンプレートにoperator +を使用して追加をオーバーロードする演算子

  16. 16

    C ++での演算子のオーバーロードは本当に戻り値を期待していますか?

  17. 17

    オーバーロードされた演算子を使用してパッケージをビルドする

  18. 18

    Javaは演算子のオーバーロードをサポートしていますか?

  19. 19

    テンプレート演算子[]が奇妙なC2676をオーバーロードしています

  20. 20

    それで.... Javaは演算子のオーバーロードをサポートしていますか?

  21. 21

    +および+ =演算子を非メンバー関数としてオーバーロードする方法は?

  22. 22

    JavaScriptで算術演算子をオーバーロードしますか?

  23. 23

    演算子のオーバーロード= std :: sortを壊します

  24. 24

    括弧演算子のオーバーロードは何をしますか?

  25. 25

    newおよびdelete演算子をオーバーロードします

  26. 26

    List <object>のBracket []演算子をオーバーロードします

  27. 27

    C ++でインクリメント演算子をオーバーロードしようとしています

  28. 28

    オーバーロード演算子<< c ++、クラスの要素をcoutしようとしています

  29. 29

    行列の*演算子をオーバーロードしようとしています

ホットタグ

アーカイブ