【问题标题】:Multiply char by integer (c++)将 char 乘以整数 (c++)
【发布时间】:2010-04-08 01:14:37
【问题描述】:

char 可以乘 int 吗?

例如,我正在尝试制作一个图表,每次出现一个数字时都带有 *。

类似的东西,但这不起作用

char star = "*";
int num = 7;

cout << star * num //to output 7 stars

【问题讨论】:

  • @dubya,c++ 标签在这里比“帮助”有用得多。首先,我们可以假设您需要帮助,因为,好吧,您在这里提出问题 :-)

标签: c++ string char multiplication


【解决方案1】:

我不会将该操作称为“乘法”,这只是令人困惑。串联是一个更好的词。

无论如何,名为std::string 的C++ 标准字符串类有一个非常适合您的构造函数。

string ( size_t n, char c );

内容被初始化为由字符cn重复形成的字符串。

所以你可以这样:

char star = '*';  
int num = 7;
std::cout << std::string(num, star) << std::endl;  

确保包含相关标头&lt;string&gt;

【讨论】:

  • +1 用于引用标准库。现在这样做的人太少了。
  • “串联”也是一个坏词。对此没有真正的说法,但我认为“迭代”更接近,因为这确实是你必须做的才能达到预期的结果。
  • 我写的时候是'catenation'。
  • 我的字典说“连接”的定义之一是“通过链接或连接添加以形成链或系列”。我觉得这是对这次行动的准确描述。
【解决方案2】:

您这样做的方式是将'*' 字符的二进制表示与数字7 相乘并输出结果数字。

您想要做的(基于您的 c++ 代码注释)是这样的:

char star = '*';
int num = 7;
for(int i=0; i<num; i++)
{
    cout << star;
}// outputs 7 stars. 

【讨论】:

    【解决方案3】:

    GMan 对这个问题的过度设计激发了我做一些模板元编程来进一步过度设计它。

    #include <iostream>
    
    template<int c, char ch>
    class repeater {
      enum { Count = c, Char = ch };
      friend std::ostream &operator << (std::ostream &os, const repeater &r) {
        return os << (char)repeater::Char << repeater<repeater::Count-1,repeater::Char>();
      }
    };
    
    template<char ch>
    class repeater<0, ch> {
      enum { Char = ch };
    friend std::ostream &operator << (std::ostream &os, const repeater &r) {
        return os;
      }
    };
    
    main() {
        std::cout << "test" << std::endl;
        std::cout << "8 r = " << repeater<8,'r'>() << std::endl;
    }
    

    【讨论】:

    • 啊,我回答的元编程对应部分。最优秀的。 +1(小心,你会因为“太聪明”而被投反对票)
    • @GMan 所以使用内置的 std::string 构造函数比 for 循环可读性差,但这值得你 +1?
    • @josh:如果您没有看到我的回答,以及一些用户在这个问题上表达的愚蠢(以及因此我对这种愚蠢的回答),那么这是没有意义的。跨度>
    【解决方案4】:

    你可以这样做:

    std::cout << std::string(7, '*');
    

    【讨论】:

      【解决方案5】:

      声明应该是:

      char star = "*";
      

      (star * num) 将 '*' 的 ASCII 值与存储在 num 中的值相乘

      要输出'*' n 次,按照别人灌输的想法。

      希望这会有所帮助。

      【讨论】:

        【解决方案6】:
        //include iostream and string libraries
        
        using namespace std;
        
        int main()
        {
        
            for (int Count = 1; Count <= 10; Count++)
            {
                cout << string(Count, '+') << endl;
            }
        
            for (int Count = 10; Count >= 0; Count--)
            {
                cout << string(Count, '+') << endl;
            }
        
        
        return 0;
        

        }

        【讨论】:

          猜你喜欢
          • 2015-04-12
          • 1970-01-01
          • 2014-04-03
          • 1970-01-01
          • 2012-02-21
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多