如何使用 std::istringstream 处理字符串?
简介
在本教程中,我们将学习 istringstream 以及如何使用它处理字符串。istringstream 是 <sstream> 头文件中定义的字符串类的对象。它用于从流中读取字符串。流是输入输出设备和程序之间的数据流(字符集合)。
<sstream>头文件定义了 3 个字符串类对象,如下所示:
istringstream
ostringstream
Stringstream
所有对象均用于单独的操作,例如,istringstream 负责流输入,ostringstream 负责流输出,而 stringstream 则处理流的输入和输出。
istringstreams 类对象使用包含字符序列的缓冲区来处理流。要使用 isstringstream 的属性,请在代码中使用此头文件。
#include <sstream>
读取字符串流中的整数,直到遇到空格
用于从字符串流中读取整数。
创建一个整数字符串。
创建一个 istringstream 对象并将整数字符串变量作为参数传递。
使用提取运算符 (>>) 检索字符串变量的值。
>> 运算符的功能与 cin 类似,它使用空格将字符串拆分成多个标记。它在找到空格后将字符串拆分成多个部分。
示例
以下是 istringstream 的 C++ 实现。istringstream 对象处理数字字符串变量,直到遇到空格,遇到空格后停止。
#include <iostream> #include <sstream> int main (){ std::string stringVar = "1 2 3 4 5"; std::istringstream issVar (stringVar); int number; issVar >> number; std:: cout << "the first number is " << number; return 0; }
输出
the first number is 1
读取整个整数流
istringstream 可用于通过循环处理整个字符串流。循环可以是 for 循环,具体取决于所需的代码。
创建一个整数字符串变量。
创建一个 istringstream 对象。
将整数字符串变量作为参数传递给 istringstream 对象。
创建一个新变量 number。
使用 while 循环处理字符串,直到 istringstream 对象为空。
使用提取运算符 (<<) 处理 istringstream 对象的 number 变量。
打印结果。
示例 1
让我们实现上述代码 -
#include <iostream> #include <sstream> #include <string> using namespace std; // Main code int main(){ // 输入数字字符串 string strVar = "1 2 3 4"; // 创建 istringstream 对象 istringstream issVar(strVar); // 字符串变量,用于存储 strVar 的值 int number; // 条件语句,用于检查字符串中所有整数 while (issVar >> number){ cout << "That stream has number: " << number << "\n"; } cout << "That stream has reached the end successfully" << "\n"; return 0; }
输出
That stream has number: 1 That stream has number: 2 That stream has number: 3 That stream has number: 4 That stream has reached the end successfully
示例 2
The above code can change using if-else conditions for checking the successful processing of the stream.
#include <iostream> #include <sstream> #include <string> using namespace std; // Main code int main(){ // 数字字符串 string strVar = "1 2 3 4"; // 为 istringstream 创建对象 istringstream issVar(strVar); // 用于存储字符串值的变量 int number; // 用于检查 issVar 的条件语句 while (issVar){ //使用 >> 运算符流式传输字符串直到出现空格 issVar >> number; // 处理直到 issVar 结束 if (issVar){ cout << "The stream has number: " << number << "\n"; } else { cout << "That stream has ended" << "\n"; } } return 0; }
输出
The stream has number: 1 The stream has number: 2 The stream has number: 3 The stream has number: 4 That stream has ended
使用 istringstream 将浮点数转换为整数
在上面的例子中,我们从字符串中流式传输整数。这里,我们从字符串中流式传输浮点数和整数值。
创建一个字符串变量并用浮点数初始化它。
为 istringstream 类创建一个对象并传递该字符串变量。
为整数声明一个 int 类型变量。
为浮点数据类型声明一个 float 类型变量。
使用提取运算符 (<<) 以及 int 和 float 变量来流式传输字符串。
示例
以上代码的 C++ 实现 −
#include <iostream> #include <sstream> using std:: istringstream; using namespace std; int main(){ //初始化字符串 string strVar = "45.65"; // 包含字符串变量的 istringstream 对象 std::istringstream issVar(strVar); // 整数数据类型变量 int number; // 浮点数据类型变量 double floatVar; issVar >> number; // 打印输出,并区分整数和浮点数 cout<< "Integer number is: " << number <<endl; issVar >> floatVar; cout << "Floating number is: " << floatVar; return 0; }
输出
Integer number is: 45 Floating number is: 0.65
使用 std::istringstream 流式传输混合数据类型
到目前为止,我们流式传输了类似的数据类型和空格。使用 istringstream,您可以同时流式传输不同类型的数据。
在此示例中,我们使用一个包含不同数据类型(例如字符串和数字)的字符串。
创建一个字符串变量并初始化它。
创建一个 istringstream 对象并将字符串变量传递给它。
为字符串的每种数据类型创建一个变量。
使用 << 运算符通过 istringstream 对象和变量对字符串进行流式传输。
使用步骤 c 中声明的变量打印输出。
示例
以下是 C++ 实现。
#include <iostream> #include <sstream> using namespace std; int main() { //字符串变量 string strVar = "Tutorials Point 34"; // 用于存储不同字符串值的变量 string first; string second; string third; //istringstream 对象 std:: isstringstream issVar; issVar.str(strVar); //流式字符串 issVar >> first; cout << "First word is : " << first << endl; issVar >> second; cout << "Second word is: " << second << endl; issVar >> third; cout << "Third word is: " << third << endl; return 0; }
输出
First word is : Tutorials Second word is: Point Third word is: 34
istringstream 的优势
它用于流式传输字符串。
通过创建 istringstream 对象,它可以流式传输多种数据类型。
它可以用来判断流式传输是否成功。
总结
本教程到此结束。在本教程中,我们通过 istringstream 处理字符串。istringstream 使用提取运算符 (>>) 及其对象来流式传输字符串。它可以用于不同的数据类型。本教程探讨了 istringstream 的含义及其在不同场景中的用法。