gpt4 book ai didi

c++ - C++中的字符串乘法

转载 作者:搜寻专家 更新时间:2023-10-31 01:36:32 30 4
gpt4 key购买 nike

这里已经有一个问题:How to repeat a string a variable number of times in C++?然而,由于问题的表述不当,主要给出了有关字符乘法的答案。有两个正确但代价高昂的答案,因此我将在此处提高要求。


Perl 提供了x 运算符:http://perldoc.perl.org/perlop.html#Multiplicative-Operators这会让我这样做:

$foo = "0, " x $bar;

我知道我可以使用其他答案中的辅助函数来做到这一点。我想知道如果没有我自己的辅助函数我可以这样做吗?我的偏好是我可以用它来初始化 const string 的东西,但如果我不能这样做,我很确定这可以用标准算法和 lambda 来回答。

最佳答案

您可以覆盖乘法运算符

#include <string>
#include <sstream>
#include <iostream>


std::string operator*(const std::string& str, size_t times)
{
std::stringstream stream;
for (size_t i = 0; i < times; i++) stream << str;
return stream.str();
}

int main() {
std::string s = "Hello World!";
size_t times = 5;

std::string repeated = s * times;
std::cout << repeated << std::endl;

return 0;
}

... 或使用 lambda ...

#include <string>
#include <sstream>
#include <iostream>

int main() {
std::string s = "Hello World!";
size_t times = 5;

std::string repeated = [](const std::string& str, size_t times) {std::stringstream stream; for (size_t i = 0; i < times; i++) stream << str; return stream.str(); } (s, times);
std::cout << repeated << std::endl;

return 0;
}

... 或使用带有引用捕获的 lambda ...

#include <string>
#include <sstream>
#include <iostream>

int main() {
std::string s = "Hello World!";
size_t times = 5;

std::string repeated = [&s, &times]() {std::stringstream stream; for (size_t i = 0; i < times; i++) stream << str; return stream.str(); }();
std::cout << repeated << std::endl;

return 0;
}

而不是使用 std::stringstream你也可以使用 std::string结合 std::string::reserve(size_t)因为您已经知道(或可以计算)结果字符串的大小。

std::string repeated; repeated.reserve(str.size() * times);
for (size_t i = 0; i < times; i++) repeated.append(str);
return repeated;

这可能会更快:比较 http://goo.gl/92hH9Mhttp://goo.gl/zkgK4T

关于c++ - C++中的字符串乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35506712/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com