有没有办法在 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

【讨论】:

“A”是(至少)两个字节 你从哪里得到这些信息? 好吧,操作问题中的编译器错误已经统计了它,但是“A”是一个 null 终止字符串,因此“A”是 'A', '\0 ' ;因此 2 个字节。我说至少是因为使用 utf8 或任何其他非 ascii 使用,'A' 可能比 a 字节大得多。 我说的更多是你必须创造更多的记忆。而不是确切的大小..谢谢

以上是关于有没有办法在 C++ 中将字符串和整数相乘? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将两个矩阵相乘

如何在 C++ 中将字符串转换为 const char[]

在 C++ 中将字符转换为整数

如何在 C++ 中将大数字符串转换为整数?

如何在 C++ 中将字符串数组转换为整数数组?

如何在 Ruby 中将字符串或整数转换为二进制?