stringstream操縱string小總結

1 split字符串

  之前在用C#寫代碼的時候,用過split函數,可以把一個字符串根據某個分隔符分成若干個字符串數組。在用C++操縱字符串的時候,我一直使用很笨的遍歷的方法。爲此,我問候過很多次C++標準委員會。直到某一天,我做了一個處理絕對路徑的題目。

  首先,我要把‘/’作爲分隔符,把輸入字符串split一下。下面是我的代碼:  

string inputString("/home/fun/./../code/");
stringstream ss(inputString);
string tmp;
while(getline(ss,tmp,'/'))
{
        if(tmp.empty())   continue;
        bulabula;             
}

  神奇的是getline函數,此函數配合stringstream使用,就實現了split函數的功能。簡直歷害!

2 格式化輸入

  當我們有一個字符串需要解析的時候,可以使用stringstream。

    string inputString("123abc 123.4one two three four");
    stringstream ss(inputString);
    string s;
    int i;
    double d;
    ss >> i >> s >> d;
    cout << i << " " << s.c_str() << " " << d ;
    while (ss >> s)
        cout <<" "<<s.c_str();
    cout << endl;    

  輸出:

    123 abc 123.4 one two three four

  是不是很好用呢?不過要注意,當我們使用>>來格式化輸入數值型變量的時候,後面是不需要跟空格的,而使用>>來格式化輸入string或char*的時候,後面一定要跟空格。當然格式化輸入string,我們也可以使用getline(ss,s,' ')。一樣的效果。

  有標準庫用的時候,還是要用的,事半功倍!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章