12

是否可以将char乘以int?

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

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

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

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

6 回答 6

33

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

在任何情况下,名为 的 C++ 标准字符串类std::string都有一个非常适合您的构造函数。

string ( size_t n, char c );

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

所以你可以这样:

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

确保包含相关的标题,<string>.

于 2010-04-08T01:21:48.837 回答
8

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

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

char star = '*';
int num = 7;
for(int i=0; i<num; i++)
{
    cout << star;
}// outputs 7 stars. 
于 2010-04-08T01:17:30.377 回答
8

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;
}
于 2010-04-08T02:09:41.060 回答
2

你可以这样做:

std::cout << std::string(7, '*');
于 2010-04-08T01:22:54.870 回答
-1

声明应该是:

char star = "*";

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

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

希望这可以帮助。

于 2010-04-08T15:14:51.333 回答
-1
//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-06T22:27:23.590 回答