zerojudge萬歲 1a6f 6 65afd 15s 1sa 12 115
0 133
C++ String Streams 字串串流
String streams 跟 和 函式庫很相近,不同的地方是,string streams 可以讓你在 string 的基礎上使用 I/O,而不是利用串流 stream 當基礎。 函式庫提供和 c 語言裡的 sscanf 和 sprintf 相類似的功能。
在 裡的三個主要類別:
*stringstream - 允許輸入輸出
*istringstream - 只允許輸入,類似 cin
*ostringstream - 只允許輸出,類似 cout
String streams 完全是 iostreams 的從屬類別 subclasses,所以所有在 iostreams 可以使用的函式也都可以用在 stringstream。請看以下網址以便獲得更多 C++ I/O functions 的資訊。
因此,string streams 也支援以下函式:
變數宣告 創造新的 string streams
<< 和 >> 利用串流運算子來讀取字串串流
rdbuf() 取得這個 string stream 的緩衝區 buffer 位址
str() 取得或設定 string streamg 的 string
變數宣告:
語法:
#include
stringstream();
stringstream( openmode mode );
stringstream( string s, openmode mode );
ostringstream();
ostringstream( openmode mode );
ostringstream( string s, openmode mode );
istringstream();
istringstream( openmode mode );
istringstream( string s, openmode mode );
stringstream、ostringstream 和 istringstream 是輸入和輸出到字串。他們表現有些類似 fstream、ofstream 和 ifstream。將怎麼打開文件的旗幟必須根據 io_stream_mode_flags 的定義。ostringstream 可以被用於在一個字串進行寫入。這類似 C 的 sprintf()。
範例:
ostringstream s1;
int i = 22;
s1 << "Hello " << i << endl;
string s2 = s1.str();
cout << s2;
同樣的,istringstream 可以被用於從一個字串中進行讀取。這類似 C 的 sscanf()。
範例:
istringstream stream1;
string string1 = "25";
stream1.str(string1);
int i;
stream1 >> i;
cout << i << endl; // 顯示 25
你也可以指定字串在你宣告變數的時候,如同以下的範例。
string string1 = "25";
istringstream stream1(string1);
int i;
stream1 >> i;
cout << i << endl; // displays 25
一個 stringstream 也可以像 fstream 一樣對一個字串進行輸入輸出。
使用串流運算子:
語法:
#include
operator<<
operator>>
和 cin、cout 使用方法一樣。
使用 str():
語法:
#include
void str( string s );
string str();
str() 有兩種使用方式。首先,直接取得目前 stringstream 裡的字串備份,這是要輸出 stringstream 最好用的方法。
範例:
ostringstream stream1;
stream1 << "Testing!" << endl;
cout << stream1.str();
第二個用法,str() 可以被用來設定 stringstream 裡的字串。
範例:
istringstream stream1;
string string1 = "25";
stream1.str(string1);
str() 如果和 clear() 一起使用的話,可以把 stringstream 清空,以便重新使用這個 stringstream。
範例:
istringstream stream1;
float num;
// use it once
string string1 = "25 1 3.235\n1111111\n222222";
stream1.str(string1);
while( stream1 >> num )
cout << "num: " << num << endl; // displays numbers, one per line
// use the same string stream again with clear() and str()
string string2 = "1 2 3 4 5 6 7 8 9 10";
stream1.clear();
stream1.str(string2);
while( stream1 >> num )
cout << "num: " << num << endl; // displays numbers, one per line
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
36891 | dsps951202@g ... (昀兒) | d098 | 301 | 2023-08-15 14:34 | |
41343 | seancai78@gm ... (風月春秋) | d098 | 118 | 2024-07-18 15:08 | |
41164 | xsw20080329@ ... (敢不敢讓我過) | d098 | 80 | 2024-07-08 11:49 | |
37836 | 990293kwi@gm ... (翔越風) | d098 | 296 | 2023-10-12 18:36 | |
31397 | jeter.nice@g ... (唯一) | d098 | 615 | 2022-07-28 10:29 |