gpt4 book ai didi

c++ - 确定 std::string 是否具有所有唯一字符 [C++]

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

我有一个看似非常简单的解决方案:

void determineStringUnique(std::string str) {
std::sort(str.begin(), str.end()); //sort characters
std::unique(str.begin(), str.end()); //remove duplicate characters in a row (why we did std::sort right before)
std::cout << str.size() << std::endl;
}

(我意识到这个功能还没有完成,我只是在研究 std::unique 之后的大小。剩下要做的是检查新大小是否等于原始大小 - 如果是,那么只有独特的字符)。

但是当我打印出 str.size() 时,它总是等于原始字符串的长度。经过一些调试后,我发现 std::unique 删除了预期的(重复的)字符,但字符串中总是有一些地方添加了一些字符,等等,我不知道为什么。

这是一个示例输入:“abcdefghijklmnopabc”。在 std::sort 之后,我得到了预期的“aabbccdefghijklmnop”。但是在 std::unique 之后,我得到了“abcdefghijklmnopnop”,这意味着它在末尾添加了“nop”,但确实去掉了开头的额外 a、b 和 c。

如果有人对此有答案,我们将不胜感激。谢谢!

最佳答案

正如您提到的,std::unique() 实际上并没有删除元素,它只是将它们打乱。它有一个返回值...

int countUniqueCharacters(std::string str)
{
// e.g. str = "abcdefabc"
std::sort(str.begin(), str.end());
// e.g. str = "aabbccdef"
auto i = std::unique(str.begin(), str.end());
// e.g. str = "abcdef???" with i pointing to first "?"
// (in other words, i = str.begin() + 6)
// Note that "?" is an unknown character, not an actual question mark
return i - str.begin();
// returns 6
}

str::unique() 函数

关于c++ - 确定 std::string 是否具有所有唯一字符 [C++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287169/

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