C++ sstream 中處理字符串

C++引入ostringstream、istringstream、stringstream這三個類,要使用他們建立對象就必須包含<sstream>這個頭文件。ios

istringstream的構造函數原形以下:
istringstream::istringstream(string str);
它的做用是從string對象str中讀取字符,stringstream對象能夠綁定一行字符串,而後以空格爲分隔符把該行分隔開來。函數

下面咱們分離以空格爲界限,分割一個字符串。學習

 

#include<iostream>
#include<sstream>
#include<string>
int main()
{
    std::string str = "I am coding ...";
    std::istringstream is(str);
    do
    {
        std::string substr;
        is>>substr;
        std::cout << substr << std::endl;
    } while (is);
    return 0;
}

程序輸出spa

Icode

am 對象

codingblog

...字符串

另外用vector也能夠實現string

#include <vector>
#include<iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    string str("I am coding ...");
    string buf;
    stringstream ss(str); 
    vector<string> vec; 
    while (ss >> buf)
        vec.push_back(buf);
    for (vector<string>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
    {
        cout << *iter << endl;
    }
    return 0;
}

補充知識點,本身積累學習it

在類型轉換中使用模板

你能夠輕鬆地定義函數模板來將一個任意的類型轉換到特定的目標類型。例如,須要將各類數字值,如int、long、double等等轉換成字符串,要使用以一個string類型和一個任意值t爲參數的to_string()函數。to_string()函數將t轉換爲字符串並寫入result中。使用str()成員函數來獲取流內部緩衝的一份拷貝:

template<class T>

void to_string(string & result,const T& t)

{

   ostringstream oss;//建立一個流

   oss<<t;//把值傳遞如流中

   result=oss.str();//獲取轉換後的字符轉並將其寫入result
}


這樣,你就能夠輕鬆地將多種數值轉換成字符串了:

to_string(s1,10.5);//double到string

to_string(s2,123);//int到string

to_string(s3,true);//bool到string

能夠更進一步定義一個通用的轉換模板,用於任意類型之間的轉換。函數模板convert()含有兩個模板參數out_type和in_value,功能是將in_value值轉換成out_type類型:

template<class out_type,class in_value>

out_type convert(const in_value & t)

{

   stringstream stream;

   stream<<t;//向流中傳值

   out_type result;//這裏存儲轉換結果

   stream>>result;//向result中寫入值

    return result;

}

這樣使用convert():

double d;

string salary;

string s=」12.56」;

d=convert<double>(s);//d等於12.56

salary=convert<string>(9000.0);//salary等於」9000」

相關文章
相關標籤/搜索