string :: find函数总是无法在字符串上搜索字符?

问题描述 投票:0回答:1

我有试图查找非重复最长字符串的代码。在下面的函数中,我传递字符串,并将第一个字符分配给临时字符串。然后,我逐个字符地遍历原始字符串,看看此字符是否出现在临时字符串中。

为此,我使用string :: find函数并检查std :: String :: npos以确保我没有得到有效的索引。但是我总是得到std :: string :: npos。我不确定这里使用的查找功能出了什么问题

int lcs(string s) {
        std::string str;
        std::string maxstr;

        int max = -1;

        str+=s[0];

        for(int i = 1 ; i < s.length(); i++)
        {
            if(str.find(to_string(s[i])) == std::string::npos)
                str+=s[i];
            else
            {
                if(str.length() > max)
                    max = str.length();
                maxstr = str;
                str.clear();
            }
        }

        return max;
    }

int main()
{
    int i = lcs("abcabcbb");
    return 0;
}

我有一些评论试图删除to_String,因为它正在将ascii值转换为字符串。这是下面的代码,我在尝试std :: to_String之前尝试过,但未按预期提供。

 int lcs(string s) {
        std::string str;
        std::string maxstr;

        int max = -1;

        str+=s[0];

        for(int i = 1 ; i < s.length(); i++)
        {
            if(str.find(s[i]) == std::string::npos)
                str+=s[i];
            else
            {
                if(str.length() > max)
                    max = str.length();
                maxstr = str;
                str.clear();
            }
        }

        return max;
    }
c++ string c++11 stl
1个回答
2
投票

但是我总是得到std :: string :: npos。我不确定此处使用的查找功能出了什么问题

这里的std::string::find()没什么问题,错误的是选择一个随机函数并将其放在那里,而又不理解或费心检查它在做什么。这是std::strig::to_string()文档中的报价:

将数值转换为std :: string。

这意味着在结果字符串中,您将获得在s[i]处具有的字符的数字代码(在您的情况下为ASCII代码)。例如,对于字母“ a”,您将获得字符串“ 97”,而在str中搜索字符串“ 97”将始终给您负面结果。

但是,如果您查看std::string::find()文档,则可以看到重载4直接接受字符,即它正在寻找单个字符。因此,如果您改为传递单个字符:

std::string::find()

它应该按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.