有没有办法在 C++ 中将字符串和整数相乘? [复制]
Posted
技术标签:
【中文标题】有没有办法在 C++ 中将字符串和整数相乘? [复制]【英文标题】:Is there a way to multiply a string and an integer in C++? [duplicate] 【发布时间】:2020-06-21 13:15:00 【问题描述】:在 Python 中,有一种方法可以将字符串相乘,例如,"A" * 3
将返回 "AAA"
。但是,这种语法在 C++ 中不起作用,它只会给我一个错误,invalid operands of types 'const char [2]' and 'int' to binary 'operator*'
。有没有办法在 C++ 中将这样的字符串相乘?
【问题讨论】:
在C++中,做一个函数可能更好:string repeat(string s, size_t n) string result; result.reserve(s.size() * n); while(n--) result += s; return result;
【参考方案1】:
C++ 中没有这样的运算符。
但是你可以写一个函数,接受一个字符串和一个数字作为参数,并返回重复的字符串。
std::string
也有一个构造函数,可以多次重复给定字符。这可能很有用,因为您使用了一个字符的字符串作为示例。
【讨论】:
【参考方案2】:你可以重载一个操作符
std::string operator*(const std::string& s, unsigned n)
... // your code here
【讨论】:
但是,当左操作数是字符串文字时,该运算符不会被拾取。 所有参数都是基本类型或标准类型的运算符重载保留给标准。 用std::string
代替*char
怎么样。
@PalLaden 你不能...你必须使用类或枚举类型。【参考方案3】:
不是真的...虽然你可以自己纠正一个。 C++ 是与 Python 截然不同的野兽。它的水平要低得多,而且没有那么宽容。
C++ 处理“真实”内存(就像它一样)。
你不能真的只说"A" * 3
,因为在"A"
之前,如果你有3 个"A"
,你只需要3 个字节就只使用1 个字节的内存。并且由于 C++ 的主要优势在于它允许用户创作它的内存使用,因此 C++ 不会只创建 3 个额外的字节。
您可以使用 C++ 提供的重载运算符(尽管您必须使用字符串等类类型)来实现您自己版本的 Python 的 "A" * 3
但我真的不推荐这样做。
我建议只使用 std::vector
并将字符附加任意多次。
还要考虑一下你真正想要做什么。 C++ 是关于性能而不是可用性。如果您尝试将多个字节设置为某个值,您可以使用std::memset
【讨论】:
以上是关于有没有办法在 C++ 中将字符串和整数相乘? [复制]的主要内容,如果未能解决你的问题,请参考以下文章