分割字符串总结

468. 验证IP地址809. Expressive Words中都出现了字符串分割,做个总结。

468这题里分割IP地址,给你指定分隔符delim,比如“:”,分割字符串。

思路很简单,遍历字符串,遇到分隔符delim,就把之前遍历的字符组成1个小组,注意在遍历结束时,如果tmp非空,说明应该1个小组。这里最后的if(ip[len-1])是针对这题而言的,普通情况下不需要这种判断。


    void split(string ip,vector<string> &vc,char delim)
    {
        int len=ip.size();
        string tmp="";
        for(int i=0;i<len;i++)
        {
            if(ip[i]!=delim)
            {
                tmp+=ip[i];
            }
            else
            {
                vc.push_back(tmp);
                tmp="";
            }
        }
        if(tmp!="")//1.1.1.2 压入最后一个‘2’
        {
            vc.push_back(tmp);
        }
        if(ip[len-1]==delim)//例子里有最后一个字符是‘:’,不是合法的IPV6
        {
            vc.push_back({});
        }
    }

809这题呢,是把"heeellooo","hello"遍历一遍,把字母相同的分成1个小组,分成多个小组。

思路:就是遍历,发现当前字符str[i]!=str[i-1](当前字符不等于  1个字符),就把之前遍历的临时字符串tmp分成单独一个组(字符串形式),tmp=str[i](tmp更新,等于当前字符),遍历结束,如果tmp非空, 把tmp存放的字符串当成一个string存放即可。 

void fun(string str,vector<string>& vc)
    {
        if(str.size()>0)
        {
            vc.clear();
            string tmp="";
            tmp+=str[0];
            for(int i=1;i<str.size();i++)
            {
                if(str[i]==str[i-1])
                {
                    tmp+=str[i];
                }
                else
                {
                    vc.push_back(tmp);
                    tmp=str[i];
                }
            }
            if(tmp!="")
            {
                vc.push_back(tmp);
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/salmonwilliam/article/details/109085679