首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串函数优化?

字符串函数优化?
EN

Stack Overflow用户
提问于 2021-12-01 16:06:04
回答 4查看 87关注 0票数 1

我是C++新手,我刚刚写了一个函数来告诉我字符串中的某些字符是否重复:

代码语言:javascript
复制
bool repeats(string s)
{
    int len = s.size(), c = 0;

    for(int i = 0; i < len; i++){
        for(int k = 0; k < len; k++){
            if(i != k && s[i] == s[k]){
                c++;
            }    
        }
    }
    return c;
}

...but我情不自禁地认为,对于它应该做的事情来说,它有点拥挤。有没有办法用更少的代码行来编写这样的函数?

EN

回答 4

Stack Overflow用户

发布于 2021-12-01 16:26:52

有没有办法用更少的代码行来编写这样的函数?

使用std,您可能会这样做:

代码语言:javascript
复制
bool repeats(const std::string& s)
{
    return std::/*unordered_*/set<char>{s.begin(), s.end()}.size() != s.size();
}
票数 5
EN

Stack Overflow用户

发布于 2021-12-01 16:12:10

代码语言:javascript
复制
#include <algorithm>

bool repeats(std::string s){
    for (auto c : s){
         if(std::count(s.begin(), s.end(), c) - 1)
             return true;
    }
    return false;
}
票数 1
EN

Stack Overflow用户

发布于 2021-12-01 16:14:43

假设您不是在寻找重复子字符串:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <set>

std::set<char> ignore_characters{ ' ', '\n' };

bool has_repeated_characters(const std::string& input)
{
    // std::set<char> is a collection of unique characters
    std::set<char> seen_characters{};

    // loop over all characters in the input string
    for (const auto& c : input)
    {
        // skip characters to ignore, like spaces
        if (ignore_characters.find(c) == ignore_characters.end())
        {
            // check if the set contains the character, in C++20 : seen_characters.contains(c)
            // and maybe you need to do something with "std::tolower()" here too
            if (seen_characters.find(c) != seen_characters.end())
            {
                return true;
            }

            // add the character to the set, we've now seen it
            seen_characters.insert(c);
        }
    }

    return false;
}

void show_has_repeated_characters(const std::string& input)
{
    std::cout << "'" << input << "' ";

    if (has_repeated_characters(input))
    {
        std::cout << "has repeated characters\n";
    }
    else
    {
        std::cout << "doesn't have repeated characters\n";
    }
}

int main()
{
    show_has_repeated_characters("Hello world");
    show_has_repeated_characters("The fast boy"); 
    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70187492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档