C++知识点(5)_substr()函数分割字符串

本节主要学习substr()函数的用法以及在实际工程中的应用。
一般来说,substr有2种用法:
假设:string s = “0123456789”;

string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"
string sbu3 =s.substr(i,j-i);//从下标为i开始截取长度为j-i位。

工程应用:利用STL自己实现split 函数(常用,简单,直观)

原型: std::vectorstd::string splitString(const std::string &s, const std::string &seperator)

输入一个字符串,一个分隔符字符串(可包含多个分隔符),返回一个字符串向量。

typedef std::string::size_type string_size;//不知道 string::size_type 的确切类型,但可以知道它是 unsigned 型。size_type 存储的 string 长度是 int 所能存储的两倍
std::vector<std::string> splitString(const std::string &s, const std::string &seperator)
{
    std::vector<std::string> result;
    string_size i = 0;

    while(i != s.size())
    {
      //找到字符串中首个不等于分隔符的字母;
        int flag = 0;
        while(i != s.size() && flag == 0)
        {
            flag = 1;
            for(string_size k = 0; k < seperator.size(); k++)//“ ”,空格字符串的大小为1
            {
                if(s[i] == seperator[k])//s[0]!=seperator[0],即判断首字符是否等于“ ”
                {
                    i++;
                    flag = 0;
                    break;
                }
            }
        }

        //找到又一个分隔符,将两个分隔符之间的字符串取出;
        flag = 0;
        string_size j = i;
        while(j != s.size() && flag == 0)
        {
            for(string_size k = 0; k < seperator.size(); k++)
            {
                if(s[j] == seperator[k])
                {
                    flag = 1;
                    break;
                }
            }
            if(flag == 0)
                j++;
        }

        if(i != j)
        {
            result.push_back(s.substr(i, j-i));//从下标为i开始截取长度为j-i位
            i = j;
        }
    }
    return result;
}
int main(){
  string s = "VERTEX2 O 0.5 1 0; 
  vector<string> v = split(s, " "); //可按空格字符来分隔;
  for(vector<string>::size_type i = 0; i != v.size(); ++i)
    cout << v[i] << " ";
  cout << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章