C++中,getline函数的详解

2024-12-03 16:40:54
推荐回答(5个)
回答1:

C++中本质上有两种getline函数,一种在头文件中,是istream类的成员函数。一种在头文件中,是普通函数。

一、在中的getline函数有两种重载形式:

istream& getline (char* s, streamsize n );

istream& getline (char* s, streamsize n, char delim );

作用是从istream中读取至多n个字符保存在s对应的数组中。即使还没读够n个字符,如果遇到换行符'\n'(第一种形式)或delim(第二种形式),则读取终止,'\n'或delim都不会被保存进s对应的数组中。

二、在中的getline函数有四种重载形式:

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

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

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

用法和上一种类似,不过要读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

扩展资料:

getline不是C库函数,而是gcc的扩展定义或者C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。

1)到文件结束,

2)遇到函数的定界符,

3)输入达到最大限度。

参考资料:getline函数-百度百科

回答2:

C++中本质上有两种getline函数,一种在头文件中,是istream类的成员函数。一种在头文件中,是普通函数。


中的getline函数有两种重载形式:

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

作用是从istream中读取至多n个字符保存在s对应的数组中。即使还没读够n个字符,如果遇到换行符'\n'(第一种形式)或delim(第二种形式),则读取终止,'\n'或delim都不会被保存进s对应的数组中。

样例程序(摘自cplusplus.com):

// istream::getline example
#include      // std::cin, std::cout

int main () {
  char name[256], title[256];

  std::cout << "Please, enter your name: ";
  std::cin.getline (name,256);

  std::cout << "Please, enter your favourite movie: ";
  std::cin.getline (title,256);

  std::cout << name << "'s favourite movie is " << title;

  return 0;
}


中的getline函数有四种重载形式:

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

istream& getline (istream&& is, string& str);
用法和上一种类似,不过要读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

样例程序(摘自cplusplus.com):

// extract to string
#include 
#include 

int main ()
{
  std::string name;

  std::cout << "Please, enter your full name: ";
  std::getline (std::cin,name);
  std::cout << "Hello, " << name << "!\n";

  return 0;
}

回答3:

C++中本质上有两种getline函数,一种在头文件中,是istream类的成员函数。一种在头文件中,是普通函数。

  1. 中的getline函数有两种重载形式:

    istream& getline (char* s, streamsize n );

    istream& getline (char* s, streamsize n, char delim );

    作用是从istream中读取至多n个字符保存在s对应的数组中。即使还没读够n个字符,如果遇到换行符'\n'(第一种形式)或delim(第二种形式),则读取终止,'\n'或delim都不会被保存进s对应的数组中。

  2. 中的getline函数有四种重载形式:

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

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


    用法和上一种类似,不过要读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

参考资料:C++中,getline的详细解析

回答4:

C++中本质上有两种getline函数,一种在头文件中,是istream类的成员函数。一种在头文件中,是普通函数。

一、在中的getline函数有两种重载形式:

istream& getline (char* s, streamsize n );

istream& getline (char* s, streamsize n, char delim );

作用是从istream中读取至多n个字符保存在s对应的数组中。即使还没读够n个字符,如果遇到换行符'\n'(第一种形式)或delim(第二种形式),则读取终止,'\n'或delim都不会被保e79fa5e98193e59b9ee7ad9431333365666239存进s对应的数组中。

二、在中的getline函数有四种重载形式:

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

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

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

用法和上一种类似,不过要读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

扩展资料:

getline不是C库函数,而是gcc的扩展定义或者C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。

1)到文件结束,

2)遇到函数的定界符,

3)输入达到最大限度。

回答5:

getline()函数有两个版本,关于这个三个参数的版本,它的第一个参数是指向字符数组的指针,因为你定义的是:char *s(只说明s是指向字符类型的指针,但没有说明它是指向字符数组的),这样能通过编译,但会运行错误,因为编译器在编译时不知道s是指向字符数组的,它以为是指向一个字符的,就只为 s所指向的内容分配一个字节的内存。

char s[1000]; (中括号里的数字小于1000可能会出错,但不一定出错,原因上面已讲)
或者char* s=new char[1000];
或者char a[1000];char * s=a;
或者char a[1000];char *s=&a[0];