📜  使用 std::istringstream 处理字符串(1)

📅  最后修改于: 2023-12-03 15:36:34.462000             🧑  作者: Mango

使用 std::istringstream 处理字符串

在 C++ 中,处理字符串是经常需要的任务之一。较小的字符串可以直接使用 stringstream 处理,但当需要对比较大的文本进行处理时,可以使用 istringstream 来处理。

istringstreamstd::istringstream 的别名,它是一个输入流,可以读入字符串并将其解析为变量。它基本上是将字符串流变成了一个标准输入流,因此可以使用流运算符>>来读取其内容。

下面是一个简单的示例,它读入一个字符串并解析其中的整数:

#include <iostream>
#include <sstream>
#include <string>

int main() {
  std::string input = "23 45 54";
  std::istringstream stream(input);
  int a = 0, b = 0, c = 0;
  stream >> a >> b >> c;
  if (!stream.fail()) {
    std::cout << "a: " << a << " b: " << b << " c: " << c << std::endl;
  } else {
    std::cerr << "input error" << std::endl;
  }
  return 0;
}

这个程序将打印出:

a: 23 b: 45 c: 54

在示例中,字符串 "23 45 54" 被读入到一个 istringstream 中。然后,它使用输入运算符 >> 来从 istringstream 中读取它并将其存储到整数变量中。如果读取成功,则打印出所读取的值。

值得注意的是,在使用 istringstream 时,必须检查其状态以确保读取成功。我们可以通过fail ()函数在输入错误的情况下检查输入流的状态。

有时候,我们希望获取整个输入流的内容而不是单个变量。在这种情况下,可以使用 std::getline() 函数来读取整行。

以下是一个示例程序,它将逐行读取输入字符串并将其打印输出:

#include <iostream>
#include <sstream>
#include <string>

int main() {
  std::string input = "Hello, world!\n"
                      "This is a demo program\n"
                      "for istringstream\n";
  std::istringstream stream(input);
  std::string line;
  while (std::getline(stream, line)) {
    std::cout << line << std::endl;
  }
  return 0;
}

这个程序将打印出:

Hello, world!
This is a demo program
for istringstream

在示例中,输入字符串被读入并存储在 istringstream 中。使用 getline() 函数,程序逐行读取输入流并将其打印到控制台中。

总体而言,使用 istringstream 处理字符串是一种非常便捷的方法,它提供了一种轻松读取字符串并将其解析为其他数据类型的方式。