getline的使用(L1-059敲笨钟)

在 C++ 中,getline 函数主要有两种常用的形式,分别是 <iostream> 头文件中的 std::getline 用于从输入流读取一行字符串,以及 <cstdio> 头文件中的 std::getline(C++11 引入)用于从文件流读取一行。下面分别介绍它们的参数:

1. std::getline 用于标准输入流或其他输入流

这个 getline 函数定义在 <iostream> 头文件中,用于从输入流中读取一行文本。它有两个重载版本:

版本一:

cpp

复制代码
#include <iostream>
#include <string>

std::istream& getline (std::istream& is, std::string& str);
  • 参数说明:

    • is:一个输入流对象的引用,通常是 std::cin 用于标准输入,也可以是文件输入流 std::ifstream 等。该函数会从这个输入流中读取数据。
    • str:一个 std::string 对象的引用,用于存储从输入流中读取的一行文本。读取的内容会被追加到这个字符串中。
  • 返回值 :返回输入流对象 is 的引用,这样可以方便进行链式调用。

示例代码:

cpp

复制代码
#include <iostream>
#include <string>

int main() {
    std::string line;
    std::cout << "请输入一行文本: ";
    std::getline(std::cin, line);
    std::cout << "你输入的文本是: " << line << std::endl;
    return 0;
}
版本二:

cpp

复制代码
#include <iostream>
#include <string>

std::istream& getline (std::istream& is, std::string& str, char delim);
  • 参数说明:

    • is:同版本一,是一个输入流对象的引用,用于读取数据。
    • str:同版本一,是一个 std::string 对象的引用,用于存储读取的内容。
    • delim:一个字符,作为分隔符。函数会从输入流中读取字符,直到遇到该分隔符为止,读取的内容(不包括分隔符)会被存储到 str 中。默认情况下,分隔符是换行符 '\n'。
  • 返回值 :返回输入流对象 is 的引用。

示例代码:

cpp

复制代码
#include <iostream>
#include <string>

int main() {
    std::string line;
    std::cout << "请输入以逗号分隔的文本: ";
    std::getline(std::cin, line, ',');
    std::cout << "读取到的内容是: " << line << std::endl;
    return 0;
}

2. std::getline 用于文件流(C++11 引入)

这个 getline 函数定义在 <cstdio> 头文件中,用于从文件流中读取一行文本。

cpp

复制代码
#include <cstdio>

std::size_t getline(char** lineptr, std::size_t* n, std::FILE* stream);
  • 参数说明:

    • lineptr:一个指向字符指针的指针。如果 *lineptr 为 NULL,则函数会使用 malloc 分配足够的内存来存储读取的行。如果 *lineptr 已经指向一块分配好的内存,函数会尝试使用这块内存,如果不够则会重新分配。
    • n:一个指向 std::size_t 类型的指针,用于存储当前分配给 *lineptr 的内存大小。如果 *lineptr 为 NULL,则 *n 会被忽略,函数会自动分配内存。
    • stream:一个 std::FILE* 类型的文件指针,指向要读取的文件流。
  • 返回值:返回读取的字符数(不包括终止的空字符),如果到达文件末尾或发生错误,则返回 -1。

示例代码:

cpp

复制代码
#include <cstdio>
#include <cstdlib>

int main() {
    std::FILE* file = std::fopen("test.txt", "r");
    if (file == nullptr) {
        std::perror("无法打开文件");
        return 1;
    }

    char* line = nullptr;
    std::size_t len = 0;
    ssize_t read;

    while ((read = std::getline(&line, &len, file)) != -1) {
        std::printf("读取到 %zd 个字符: %s", read, line);
    }

    std::free(line);
    std::fclose(file);
    return 0;
}

以上就是 getline 函数在 C++ 中的不同参数形式和使用方法。

相关推荐
程序猿_极客6 分钟前
【免费】分享一套优质的基于SpringBoot的服装商城管理系统的设计与实现(带可视化图表、协同过滤功能),源码+文档+视频详解(讲解)
java·spring boot·后端·服装商城管理系统
用户37215742613527 分钟前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java
zyseo81 小时前
谷歌SEO 站内搜索优化实战:把站内搜索词变成关键词金矿
java·服务器·数据库
bug菌1 小时前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端
佳児素花痴╮1 小时前
线程知识点
java·开发语言·jvm
镜子AI1 小时前
教培机构AI推荐系统实战:概念漂移检测算法——为什么“去年有效的推荐今年可能失效“
人工智能·算法
fundoit2 小时前
为什么需要 Access Token 和 ID Token 两个令牌
java·spring·架构·github·oauth2
鱼宵2 小时前
Spring AI 流式输出:Flux + SSE 打字机,回答不再干等三秒
java·人工智能·spring·sse·springai·流式输出
shaibdoio2 小时前
AI主动获客的意图识别工程实现:从规则匹配到模型微调
java·开发语言·人工智能·长沙瞬维ai
for_ever_love__2 小时前
MySQL 事务隔离级别讲透:MVCC、幻读与四个级别怎么选
java·数据库·mysql·事务·mvcc·不可重复读·幻读