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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章