![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuUzM2MTNyATM3IjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一、字元串流:stringstream
假設現在有一個浮點值數組,需要用一個字元串來包含所有數組中所有數字的文本表示,精度為 4位,每行包含 4 個數字,并且在寬度為 7 個字元的列中右對齊。
當然,使用 std::string 是可以實作這個要求的,隻不過需要使用一系列複雜的連接配接,并間或調用 std::to_string() 和 substr()。但是,那種方法很枯燥,且容易出錯。
如果要求将這些數字流輸出到 std::cout,那就簡單多了,隻需要使用 iomanip 頭檔案中的幾個流操作程式就可以。
好消息是,标準庫提供了一種不同類型的流,它不将字元直接輸出到計算機螢幕,而是将字元收集到一個 string 對象中。然後,就可以在任何時候擷取這個 string 對象并做進一步處理。
不隻可以使用 std::stringstream 對象來将數字寫入字元串,還可以用它從給定輸入字元串讀取值。自然,這需要使用 >> 運算符,而且工作方式與對應的 std::cin 運算符相同。
這種流類型被命名為 std::stringstream,定義在 sstream 頭檔案中,其使用方式與 std::cout 一樣。
二、示例程式:
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<double> values;
cout << "How many numbers do you want to enter?";
size_t num{};
cin >> num;
for (size_t i{}; i < num; ++i)
{
double d{};
cin >> d;
values.push_back(d);
}
stringstream ss;
for (size_t i{}; i < num; ++i)
{
ss << setprecision(4) << setw(7) << right << values[i];
if ((i + 1) % 5 == 0)
ss << endl;
}
string s{ ss.str() };
cout << s << endl;
}