日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stringstream用法总结

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stringstream用法总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、概念

二、基本功能

功能一:預定的格式將程序中的數據保存在一個string 中

功能二:實現類型轉換

?????????功能三:實現任意類型轉換

三、重要功能

1.數字由空格或逗號分開。

2.數字由逗號分開

3.數字間不止一類符號分隔


一、概念

C++引入了ostringstream、istringstream、stringstream這三個類,要使用他們創建對象就必須包含sstream.h頭文件。

istringstream類用于執行C++風格的串流的輸入操作。?
ostringstream類用于執行C風格的串流的輸出操作。?
strstream類同時可以支持C風格的串流的輸入輸出操作。

istringstream類是從istream和stringstreambase派生而來,ostringstream是從ostream和 stringstreambase派生而來, stringstream則是從iostream類和stringstreambase派生而來。

他們的繼承關系如下圖所示:

istringstream是由一個string對象構造而來,istringstream類從一個string對象讀取字符。?
istringstream的構造函數原形如下:?

istringstream::istringstream(string str);

C++ stringstream 類是一種十分有用的類,特別是當我們需要在程序中使用字符串和數字數據的時候。要想在程序中使用 stringstream 類,我們需要在源程序文件中包含頭文件include<sstream>。stringstream 對象的使用方法與cout對象的使用方法基本相同。stringstream 類提供的函數,將數字化轉化為字符串。

當我們需要按預定的格式將程序中的數據保存在一個string 中的時候,可以先創建一個stringstream 對象,并通過運算符 ”<<“ 將數據傳遞給 stringstream 對象。(這與通過”<<“ 使用cout 對象的方法相同。)接著,我們可以通過調用stringstream 類的函數str() 將對象所包含的內容賦給一個string對象。在一下的程序中,我們先將數據傳遞給一個stringstream 對象,然后通過該 stringstream 對象將數值賦給一個string 對象。住:cout能使用的所有ios格式標記也可以在stringstream 對象中使用。

二、基本功能

功能一:預定的格式將程序中的數據保存在一個string 中

// 如何使用 stringstream // 對象生成格式化的 string#include <iostream> #include <string> #include <sstream> using namespace std;int main() {cout << "\n Welcome to the StringStream Demo program.\n";// 構建一些將在string中出現的數據變量// PI 精確到小數點后15位double pi = 3.141592653589793;float dollar = 1.00;int dozen = 12;string text;// 我們希望tring 的格式如下:// dozen適12,dollar是$1.00// 精確到小數點后10為pi是3.141592653589793// 生成stringstream 對象stringstream ss;// 現在像使用cout一樣使用ssss << " A dozen is "<< dozen << ", a dollar is $ ";ss.setf(ios::fixed);ss.precision(2);ss << dollar << " and \n the value of pi to 10 places is ";ss.precision(10);ss << pi << ".";// 現在將ss中的內容賦給一個string對象// 使用str()函數text = ss.str();cout << "\nHere is our formatted text string:\n" << text << endl;// 再加入一些信息ss << "\ There are 2 \"+\" in C++.";text = ss.str();cout<< "\nHere is the final string:\n" << text << endl;return 0; }

功能二:實現類型轉換

string到 int / double 的轉換

#include <iostream> #include <string> #include <sstream> using namespace std;int main() {double rb; int ri; // 存儲結果string s; // 要轉化的字符串stringstream ss;s = "123.456789";ss << s; // 類似 coutss >> rb; // 類似 cincout.precision(10);cout << "string \""<< s << "\" to double object " << rb << endl;s = "654321";ss.clear(); //清空流ss << s;ss >> ri;cout << "string \""<< s << "\" to int object " << ri << endl;return 0; }

功能三:實現任意類型轉換

#include <iostream> #include <string> #include <sstream> using namespace std; template <class t1="" class="" t2="">int main() {double sb = 123.456; int ri; // 存儲結果stringstream ss;ss << sb;ss >> ri;cout << ri;return 0; }

該功能沒多少實際意義,不如static_cast 來的簡單。?

三、重要功能

寫這篇文章的目的主要是解決在筆試過程中,利用stringstream解決輸入的問題。

解決問題的關鍵是,以stringstream為輸入流,然后以getline識別分隔符然后進行處理。

常見輸入是一行,然后將其放入vector中。

1.數字由空格或逗號分開。

5 1 2 3 4 5

#include<bits/stdc++.h> //如果沒有這個頭文件 //看這里https://blog.csdn.net/qq_41687938/article/details/116535313 using namespace std;int main() {stringstream ss;vector<int> nums;string input;getline(cin, input);ss << input;int num;while (ss >> num) {nums.push_back(num);}for (auto a : nums) {cout << a << endl;}return 0; }

因為stringstream默認輸出由空格分開?

2.數字由逗號分開

5,1,2,3,4,5

?

#include<bits/stdc++.h> //如果沒有這個頭文件 //看這里https://blog.csdn.net/qq_41687938/article/details/116535313 using namespace std;int main() {stringstream ss;vector<int> nums;string input;getline(cin, input);ss << input;string num;while (getline(ss, num, ',')) {nums.push_back(stoi(num));}for (auto a : nums) {cout << a << endl;}return 0; }

3.數字間不止一類符號分隔

5,[1,2,3,4,5]

如果除了分隔符還有其他無關字符,就得提取出來后,自己加判斷了。?

#include<bits/stdc++.h> using namespace std;int main() {//std::string input;//{'5',',','[','1',',','2',',','3',',','4',',','5',']'};//5,[1,2,3,4,5]getline(cin, input);std::stringstream ss(input);string str;int a;vector<int> nums;while (getline(ss, str, ',')) {if (!str.empty() && str[0] == '[') {a = stoi(str.substr(1));}else if (!str.empty() && str[str.size() - 1] == ']')a = stoi(str.substr(0, str.length() - 1));elsea = stoi(str);nums.push_back(a);}for (int i = 0; i < nums.size(); i++)cout << nums[i] << ' ';return 0; }

總結

以上是生活随笔為你收集整理的stringstream用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。