将字符乘以整数 (c++)

13

能否将char乘以int?

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

所以像这样,但这行不通:

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

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

2
@dubya,C ++ 标签在这里比“帮助”标签更有用。首先,我们可以假设您需要帮助,因为您在这里提问 :-) - paxdiablo
6个回答

37

我不会把那个操作称为“乘法”,这样只会让人感到困惑。连接是一个更好的词。

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

string ( size_t n, char c );

内容被初始化为一个由字符c重复n次形成的字符串。

因此,您可以这样做:

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

请确保包含相关的头文件,<string>


3
引用标准库加一分。这些天很少有人这样做。 - Randolpho
3
“Concatenation”也是一个不好的词。实际上没有一个完全对应的词,但我认为“迭代”更接近,因为这才是实现所需结果的方法。 - SoapBox
1
当我写下这个词时,它是“连接”。 - janks
2
我的词典上说,“concatenation”的其中一个定义是“通过连接或结合以形成链条或系列来添加”。这个描述对我来说似乎非常准确。 - janks
连接(concatenate):将两个或多个字符串、数组或其他数据结构组合成一个更大的结构,通常通过将它们依次排列在一起来完成。这个术语也可以用作动词,表示执行此操作。 - dreamlax
显示剩余2条评论

8

您正在执行的操作将对二进制表示中的字符'*'进行数字乘法,乘以数字7并输出结果。

根据您的c++代码注释,您想要做的是:

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

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;
}

2
啊,一个元编程的对手回答。太好了。+1(小心,你会因为“太聪明”而被踩) - GManNickG
@GMan,因此使用内置的std :: string构造函数比使用for循环不易读,但这值得你点赞吗? - joshperry
@josh:如果你没有看到我的回答,以及一些用户在这个问题上表达的愚蠢(因此我对那种愚蠢的回复),这句话就没有意义了。 - GManNickG

3
你可以这样做:
std::cout << std::string(7, '*');

-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;

}


-1

应该是这样的语句:

char star = "*";

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

若要输出 '*' n 次,请遵循其他人提供的想法。

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接