C ++ stringstream –参考和使用教程
C ++ stringstream是字符串上的流类。
这使我们可以采用字符串并将其视为流对象,例如cin或者cout。
因此,我们可以使用" <<"和" >>"来执行诸如间接和向外等操作。
让我们看看如何使用此类轻松解析字符串。
创建一个字符串流对象
我们可以转换一个字符串,并创建一个stringstream对象。
但是在此之前,我们需要包含相关的头文件,可以在<sstream>头文件中获得该头文件。
#include <sstream>
创建对象非常简单。
相关的类型是stringstream,我们需要在构造函数中输入一个字符串。
#include <iostream>
#include <string>
#include <sstream>
//We use the std:: namespace,
//otherwise we need to specify the
//stringstream using std::stringstream
using namespace std;
int main() {
//Input string
string input_string = "Hello from theitroad";
//Create the stringstream from the input string
stringstream ss(input_string);
cout << "Created a stringstream object\n";
return 0;
}
输出
Created a stringstream object
目前,我们还没有使用stringstream对象。
现在,让我们看一下如何从流中读取或者写入。
读入C ++字符串流
与cin类似,我们可以使用>>操作符执行此操作,以从stringstream中读取字符串。
当我们使用字符串初始化stringstream对象时,该字符串的内容将被视为类似于流的对象。
string word; //Read from the stringstream into word ss >> word; cout << word << endl;
因此,无论何时从流中读取,我们都会得到一个字符串!此方法的优点是它会自动解析定界符,例如空格,逗号等。
在使用定界符进行解析之后,我们可以使用stringstream来解析输入字符串并获取字符串数组!
#include <iostream>
#include <string>
#include <sstream>
//We use the std:: namespace,
//otherwise we need to specify the
//stringstream using std::stringstream
using namespace std;
int main() {
//Input string
string input_string = "Hello from theitroad";
//Create the stringstream from the input string
stringstream ss(input_string);
cout << "Created a stringstream object\n";
//To store the words that we get back from the stringstream
string words[5];
string buffer;
int i = 0;
while (ss >> buffer) {
words[i] = buffer;
cout << "Buffer: " << buffer << endl;
i++;
}
//Print the tokenized set of strings from words[]
cout << "Printing the tokenized array of strings\n";
for (int j = 0; j < i; j++) {
cout << words[j] << endl;
}
return 0;
}
其中我们使用ss >> buffer检查流是否为空。
如果ss不为空,它将写入buffer并进入循环体。
否则,它将仅从循环中退出。
由于我们的输入字符串包含空格,因此删除空格后,输出将是字符串的标记化列表。
输出
Created a stringstream object Buffer: Hello Buffer: from Buffer: theitroad Printing the tokenized array of strings Hello from theitroad
写入stringstream
与从流中读取类似,我们也可以写入流中,就像cout <<一样!
与我们之前的示例不同,我们无需使用构造函数初始化stringstream对象,而只需声明它,然后再写它即可!
//Input string string input_string = "Hello from theitroad"; //Create an empty stringstream object stringstream ss; ss << input_string;
因此,我们将获得与以前相同的输出,但现在我们也已将其写入流中!
#include <iostream>
#include <string>
#include <sstream>
//We use the std:: namespace,
//otherwise we need to specify the
//stringstream using std::stringstream
using namespace std;
int main() {
//Input string
string input_string = "Hello from theitroad";
//Create the stringstream from the input string
stringstream ss;
cout << "Created a stringstream object\n";
//To store the words that we get back from the stringstream
string words[5];
string buffer;
ss << input_string;
int i = 0;
while (ss >> buffer) {
words[i] = buffer;
cout << "Buffer: " << buffer << endl;
i++;
}
//Print the tokenized set of strings from words[]
cout << "Printing the tokenized array of strings\n";
for (int j = 0; j < i; j++) {
cout << words[j] << endl;
}
return 0;
}
输出
Created a stringstream object Buffer: Hello Buffer: from Buffer: theitroad Printing the tokenized array of strings Hello from theitroad
清除C ++字符串流
假设您要擦除当前在ss上的任何内容,有一个简单的功能:
ss.clear();
这只是清除缓冲区中存在的任何内容。
#include <iostream>
#include <string>
#include <sstream>
//We use the std:: namespace,
//otherwise we need to specify the
//stringstream using std::stringstream
using namespace std;
int main() {
//Input string
string input_string = "Hello from theitroad";
//Create the stringstream from the input string
stringstream ss;
cout << "Created a stringstream object\n";
//To store the words that we get back from the stringstream
string words[5];
string buffer;
ss << input_string;
int i = 0;
while (ss >> buffer) {
words[i] = buffer;
cout << "Buffer: " << buffer << endl;
i++;
}
//Print the tokenized set of strings from words[]
cout << "Printing the tokenized array of strings\n";
for (int j = 0; j < i; j++) {
cout << words[j] << endl;
}
ss.clear();
if (ss >> buffer) {
cout << "Stream is not empty: Contains " << buffer << endl;
}
else {
cout << "Stream is empty!\n";
}
return 0;
}
输出
Created a stringstream object Buffer: Hello Buffer: from Buffer: theitroad Printing the tokenized array of strings Hello from theitroad Stream is empty!
我们使用if(ss >> buffer)检查流实际上是否为空。
由于结果是false,因此我们确实清除了字符串流!

