码迷,mamicode.com
首页 > 其他好文 > 详细

String相关操作

时间:2015-07-25 19:48:41      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

1.求字符串中连续出现最多的字串

pair<string, int> substring(const string& str)
{
    int i, j, k, len = str.length(), count, maxcount = 1;
    string substr;
    vector<string> substrs;

    //存储所有的子字符串
    for ( i = 0; i < len; ++i)
    {
        substrs.push_back(str.substr(i, len - i));
    }

    for ( i = 0; i < len; ++i)
    {
        for ( j = i + 1; j < len; ++j)
        {
            count = 1;
            if (substrs[i].substr(0,j-i)==substrs[j].substr(0,j-i))
            {
                ++count;
                for (k = j + (j - i); k < len; k += j - i)
                {
                    if (substrs[i].substr(0, j - i) == substrs[k].substr(0, j - i))
                    {
                        ++count;
                    }
                    else
                        break;
                }
                if (count>maxcount)
                {
                    maxcount = count;
                    substr = substrs[i].substr(0, j - i);
                }
            }
        }
    }

    return make_pair(substr, maxcount);
}

大致理解,但是有没有更佳的解法呢?

 

2.求字符串中出现的相同且长度最长的字符串,输出首字符的位置

pair<string, int> substring(const string& str)
{
    string substr{""};
    int i, j, left, right, len = str.length();

    for (i = len - 1; i > 1; --i)
    {
        for ( j = 0; j < len; ++j)
        {
            if (j + i < len)
            {
                left = right = 0;
                substr = str.substr(j, i);

                left = str.find(substr);
                right = str.rfind(substr);

                if (left!=right)
                {
                    return make_pair(substr,left);
                }
            }
            else 
                break;
        }
    }

    return make_pair(substr,0);
}

从大字符串进行拆分,两边结合搜索比将所有子字符串拆分寻找效率高。

至于调用库函数,是比较方便的选择。

 

3.重写strstr,且返回朱传忠字符子串位置以后的所有字符

const char* strstr_(const char* src,const char* substr)
{
    const char* tmp;
    while (*src!=0)
    {
        if (*src==*substr)
        {
            tmp = substr;
            while (*src++==*tmp++)
            {
                if (*tmp==\0)
                {
                    return src;
                }
            }
        }
        else
            *src++;
    }

    return nullptr;
}

注意其中为什么使用tmp代替字串,因为可能会重复比较,所以需要字串的值持续存在。

String相关操作

标签:

原文地址:http://www.cnblogs.com/jason1990/p/4676348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!