gpt4 book ai didi

C++,转换字符串,使连续下划线序列成为单个下划线

转载 作者:太空狗 更新时间:2023-10-29 23:21:18 26 4
gpt4 key购买 nike

在 C++ 中,编写一个函数来转换字符串,使连续的下划线序列变成单个下划线。例如。 (‘_hello___world__’ => ‘_hello___world_’)。

相关问题:Consolidate multiple characters to one character in c++。 abbbcc -> abc

最佳答案

使用 erase/unique 和 C++11 lambda。

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
std::string text("_hello___world__");

text.erase(
std::unique(
text.begin(),
text.end(),
[](char a, char b){ return (a == b) && (a == '_'); }
),
text.end()
);

std::cout << text << '\n';

return 0;
}

如果你不想使用 lambda,你可以像这样定义一个仿函数:

class both_equal_to
{
char value;
public:
both_equal_to(char ch) : value(ch) {}

bool operator()(char first, char second) const
{
return (first == second) && (first == value);
}
};

然后用 both_equal_to('_') 替换 lambda。

如果您只使用 char* 并且不想支付构建 std::string 的成本,则以下代码更接近 RolandXu 的代码。

char *convert_underscores(char *str)
{
if (str)
{
size_t length = strlen(str);
char *end = std::unique(str, str + length, both_equal_to('_'));
*end = '\0';
}
return str;
}

关于C++,转换字符串,使连续下划线序列成为单个下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843271/

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