如何使用 std::istringstream 处理字符串?

data structurec++server side programmingprogramming

简介

在本教程中,我们将学习 istringstream 以及如何使用它处理字符串。i​​stringstream 是 <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 处理字符串。i​​stringstream 使用提取运算符 (>>) 及其对象来流式传输字符串。它可以用于不同的数据类型。本教程探讨了 istringstream 的含义及其在不同场景中的用法。


相关文章