0

C ++でパディング付きの文字列を印刷するにはどうすればよいですか?具体的に私が欲しいのは:

cout << "something in one line (no prefix padding)"
cout << "something in another line (no prefix padding)"
set_padding(4)
    cout << "something with padding"
    cout << "something with padding"
set_padding(8)
        cout << "something with padding"
        cout << "something with padding"

つまり、私は何度もcoutに電話をかけますが、いつも電話をかけたくはありませんsetw(len) << ""

4

3 に答える 3

4

プリプロセッサに入力させることができると思います。

#include <iostream>
#define mout std::cout << std::string(width,' ')
#define mndl "\n" << std::string(width,' ')

int width=0;

int main()
{
    mout << "Hello" << std::endl; 

    width = 8;

    mout << "World." << mndl << "Next line--still indented";
    // more indented lines...
}
于 2012-08-11T19:14:47.727 に答える
3

次のようなものはどうですか?

class IndentedOutput
{
public:
    IndentedOutput()
    {
        m_indent = 0;
    }

    void setIndent(unsigned int indent)
    {
        m_indent = indent;
    }

    template <typename T>
    std::ostream& operator<< (const T& val)
    {
        return (std::cout << std::string(m_indent,' ') << val);
    }

private:
    unsigned int m_indent;
};

そして、あなたはそれをこのように使うことができます:

IndentedOutput ind;

int i =0;
ind << "number is " << i++ << '\n';
ind << "number is " << i++ << '\n';
ind.setIndent(4);
ind << "number is " << i++ << '\n';
ind << "number is " << i++ << '\n';
ind.setIndent(6);
ind << "number is " << i++ << '\n';
ind << "number is " << i++ << '\n';
ind.setIndent(0);
ind << "number is " << i++ << '\n';
于 2012-08-11T19:53:54.203 に答える
-1

http://www.cplusplus.com/reference/iostream/manipulators/

編集:申し訳ありませんが、私は少し手短でした。私が意味したのは、iomanipがどのように機能するかを調査することでした。あなたは、sets(n)<<""を知っていると思います。

迅速で汚い実装のベースラインとしてiomanipを使用して、これが私が思いついたものです。

#include <iostream>
#include <iomanip>
#include <string>

class setpw_ {
  int n_;
  std::string s_;
public:
  explicit setpw_(int n) : n_(n), s_("") {}
  setpw_(int n, const std::string& s) : n_(n), s_(s) {}

  template<typename classT, typename traitsT>
  friend std::basic_ostream<classT, traitsT>&
  operator<<(std::basic_ostream<classT, traitsT>& os_, const setpw_& x) {
    os_.width(x.n_);
    os_ << "";
    if ( x.s_.length()){
      os_ << x.s_;
    }
    return os_;
  }
};

setpw_ setpw(int n) { return setpw_(n); }
setpw_ indent(int n, const std::string& s) { return setpw_(n, s); }

int
main(int argc, char** argv) {
  std::cout << setpw(8) << "Hello, World" << std::endl;
  std::cout << indent(8,   "----^BYE^---") << std::endl;
  return 0;
}
于 2012-08-11T18:54:13.843 に答える