多行输入(stringstream和getline)

1.stringstream

在C++中,std::stringstream 是标准库中的一个类,位于 <sstream> 头文件中。它提供了一个用于在内存中进行输入输出操作的字符串流。std::stringstream 允许类似用 std::cin 和 std::cout 一样操作字符串,它可以用来从字符串中读取数据,或将数据写入到字符串中。主要用于进行字符串的格式化和数据的转换。

 1.创建和初始化

可以通过以下几种方式创建 std::stringstream 对象:

  • 默认构造:创建一个空的 stringstream 对象。
  • 使用字符串初始化:通过构造函数将一个字符串传给 stringstream

示例:

#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss1;
    
    // 使用字符串初始化
    std::stringstream ss2("qwe zxc");
    
    return 0;
}

 2.输出

#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss;
    
    int x = 12;
    double y = 3.45;
    
    // 向stringstream中写入数据
    ss << "It " << x << ", Double: " << y;
    
    std::cout << ss.str() << std::endl;  // 输出字符串
    return 0;
}

上述代码 ss.str() 返回的是字符串流中存储的字符串。

 3.输入操作

#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss("100 200 3.45");

    int a, b;
    double c;
    
    // 从stringstream中读取数据
    ss >> a >> b >> c;
    
    std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl;
    return 0;
}

以上代码 stringstream 中的字符串被解析并提取成不同的变量。

 3. 清空操作

如果想清空 stringstream 中的数据,可以使用 str("") 方法,将流的内容设置为空字符串,或者使用 clear() 来重置流的状态。

#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss;
    ss << "Hello, world!";
    
    std::cout << ss.str() << std::endl;  // 输出 "Hello, world!"
    
    ss.str("");  // 清空内容
    std::cout << ss.str() << std::endl;  // 输出空字符串
    
    return 0;
}

1.getline

 1.getline函数介绍

 getline 函数是 C++ 中用于从输入流中读取一行文本的函数,通常用于读取用户输入或文件中的一行数据。它的基本用法是:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string line;  // 用来存储输入的文本

    // 提示用户输入一行文本
    cout << "请输入一行文本: ";

    // 使用 getline 从标准输入中读取一整行
    getline(cin, line);  

    // 输出用户输入的内容
    cout << "你输入的内容是: " << line << endl;

    return 0;
}

 getline 会读取一整行数据,直到遇到换行符(\n)为止。它不会将换行符包含在返回的字符串中。函数原型为:

 

istream& getline (istream& is, string& str);

它接受两个参数:

  1. is:输入流对象(如 cin 或 ifstream)。
  2. str:存储读取内容的 string 对象。

这个函数会自动处理换行符,因此你无需手动清理换行符,避免了常见的读取问题。

 2. 使用 cin 和循环

可以使用 cin 来逐行读取输入数据,然后根据特定条件判断是否继续读取。例如,当输入数据结束时(通常是遇到文件结束符 EOF 或空行),停止读取。

示例:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string line;
    while (getline(cin, line)) {
        // 处理每一行输入的内容
        cout << "输入的行是: " << line << endl;
    }
    return 0;
}

上述代码中,getline(cin, line) 会读取每一行输入数据,直到输入结束(通常通过 Ctrl + Z 或 Ctrl + D 来结束)。读取的每一行会存储在 line 变量中,之后你可以对该行数据进行处理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值