getlineget和put函数

Posted bwjblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getlineget和put函数相关的知识,希望对你有一定的参考价值。

 getline函数

这个函数我们之前就有使用过:由于流提取运算符(>>)会以空白符分割,所以我们的输入中无法包含空格。而使用getline函数可以指定分隔符,这样就可以读入包含空格的文本了(如:New York)。关于getline函数,可以回顾博客C++字符串最后的部分。

getline函数定义在头文件<iostream>中。

当时我们写的是

getline(cin, city, 
);

这句话的意思是,从标准输入(键盘)读入到字符串city中,并使用换行作为分隔符。

这里我们规范一下getline函数的语法:

getline(ifstream& input, string s, char delimitChar)
//input是输入的对象,可以是一个文件,也可以是标准输入(cin)
//s是接受字符串,所读取的信息存储在s中
//delimitChar是分隔符,默认是空白符

当函数读到分隔符或文件末尾时,就会停止。

get函数和put函数

get函数会从输入对象读取一个字符,而put函数会向输出对象写入一个字符。

get函数有两个版本:

char get()
ifstream* get(char& ch)

第一个版本返回从输入对象读取的一个字符。

第二个版本则将字符存在字符ch中,并返回输入对象的引用。

put函数只有一个版本:

void put(char ch)

它将指定的字符写入输出对象。

下面我们给出一个例子,用于一个文件复制为另一个文件:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    cout << "输入要复制的文件名:";
    string inputFileName;
    cin >> inputFileName;

    cout << "输入复制后的文件名:";
    string outputFileName;
    cin >> outputFileName;

    ifstream input(inputFileName.c_str());
    ofstream output(outputFileName.c_str());

    if(input.fail()){
        cout << "文件不存在!" << endl;
        return -1;
    }

    char ch = input.get();
    while(!input.eof()){
        output.put(ch);
        ch = input.get();
    }

    input.close();
    output.close();

    cout << "复制完成" << endl;
    return 0;
}

运行结果:

技术图片

 

 技术图片

 

以上是关于getlineget和put函数的主要内容,如果未能解决你的问题,请参考以下文章

[NTUSTISC pwn LAB 7]Return to libc实验(puts泄露libc中gadget片段定位)

Node.js JavaScript 片段中的跳过代码

包含不同片段的HashMap(或ArrayList)

VSCode自定义代码片段——声明函数

malloc()參数为0的情况

VSCode自定义代码片段8——声明函数