C++中getline函数的使用

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 int main(){
 7
 8     char* s;
 9     s = new char[50]; //必须要分配空间
10     cin.getline(s,5);
11     int i = 0;
12     while(s[i] != ‘\0‘){
13         cout<<s[i];
14         i++;
15     }
16     cout<<endl<<i<<endl;
17     cin.clear(); //当failbit位为1时需要clear,否则后面的getline读取为空字符串
18
19     string str;
20     getline(cin,str);
21     cout<<str<<endl;
22     getline(cin,str,‘#‘);
23     cout<<str<<endl;
24     getline(cin,str);
25     cout<<str<<endl;
26
27     return 0;
28 }

输入输出:

(input)slkdsa;34
slkd
4
sa;34
(input)hel#id
hel
id

分析:

C++中有两个getline函数,一个是在string头文件中,定义的是一个全局的函数,函数声明是istream& getline ( istream& is, string& str, char delim )与istream& getline ( istream& is, string& str );

另一个则是istream的成员函数,函数声明是istream& getline (char* s, streamsize n )与istream& getline (char* s, streamsize n, char delim );注意第二个getline是将读取的字符串存储在char数组中而不可以将该参数声明为string类型,因为C++编译器无法执行此默认转换。

getline函数大致流程:

1、首先判断istream的failbit位是否为1,为1的话意味着输入流的状态有错误,则不进行读操作,getline函数结束执行

2、从当前位置开始从输入流中依次读取单个字符并拷贝到缓冲区,直到遇到下列条件满足时,循环结束。

(1)遇到文件尾时停止读操作,并设置流对象的结束标记为1

(2)读到调用者指定的分隔符时,此时将分隔符之前的字符拷贝到缓冲区中,但分隔符本身不拷贝进去,并且下次读操作将从分隔符后的下一个字符开始。

(3)已经读了n-1个字符(n是调用者传入的第二个实参_Count的初值),此时要把流对象的错误标志位置1

利用getline连续读取直至文末

 1 #include <iostream>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 int main(){
 7
 8     string s;
 9     while(getline(cin,s)){
10         cout<<s<<endl;;
11     }
12
13     return 0;
14 }
时间: 2024-11-13 04:07:48

C++中getline函数的使用的相关文章

C/C++中的getline函数总结:

来自:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html C/C++中的getline函数总结 getline函数是一个比较常见的函数.根据它的名字我们就可以知道这个函数是来完成读入一行数据的.现在对getline函数进行一个总结. 在标准C语言中,getline函数是不存在的.下面是一个简单的实现方式: int getline_(char s[],int lim){    int c,i;    i=0;    whi

[转]C++中cin、cin.get()、cin.getline()、getline()函数的简单总结

参考原文:http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html,另外做了一些修改~ 1.cin 2.cin.get() 3.cin.getline() 4.getline() 附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符 1.cin 用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream> using namespace std; ma

string 类型的输入操作符 cin 和 getline 函数分别如何处理空白字符?

string用来读取一个word : string 类型的输入操作符 cin 对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中). getline 函数用来读取整行文本,接受两个参数:一个输入流对象和一个 string 对象,例如 getline(cin,line): getline 函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在

getline函数(精华版)

在我的印象中,getline函数经常出现在自己的视野里,模糊地记得它经常用来读取字符串 .但是又对它的参数不是很了解,今天又用到了getline函数,现在来细细地总结一下: 首先要明白设计getline函数的目的,其实很简单,就是从流中读取字符串.而且读取的方 式有很多,包括根据限定符,根据已读取的字符的个数.从这个函数的名称来看,它的直观 意义是从流中读取一行,但是大家不要被这表面的现象所迷惑.其实如果让我来为这个函数 去一个名字的话,或许我会取一个getString,因为它的目的本来就是从流

getline()函数详解--转自黄昏飘雪的那夏

本文转自黄昏飘雪的那夏,原作者www.cnblogs.com/overcode 学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”.书上给的程序如下: int main() { string line: while(getline(cin,line)) cout<<line<<endl; return 0; } 大家会发现运行时怎么也跳不出循环,甚至会发生各种莫名其妙的错误.这是为什么

getline函数

在我的印象中,getline函数常常出如今自己的视野里,模糊地记得它常常常使用来读取字符串 .可是又对它的參数不是非常了解,今天又用到了getline函数,如今来细细地总结一下: 首先要明确设计getline函数的目的,事实上非常easy,就是从流中读取字符串.并且读取的方 式有非常多,包含依据限定符,依据已读取的字符的个数.从这个函数的名称来看,它的直观 意义是从流中读取一行,可是大家不要被这表面的现象所迷惑.事实上假设让我来为这个函数 去一个名字的话,也许我会取一个getString,由于它

getline()函数的功能

getline函数的作用是从输入流中读取一行字符,其用法与带3个参数的get函数类似.即    cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符) [例13.7] 用getline函数读入一行字符. #include <iostream> using namespace std; int main( ) { char ch[20]; cout<<"enter a sentence:"<<endl; cin>>c

getline()函数

这是c++中 getline()的原型是istream& getline ( istream &is , string &str , char delim ); 其中 istream &is 表示一个输入流,譬如cin:string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以):char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入). 那么如果把get

sstream头文件-getline 函数 和 stringstream函数 和string的常见用法

#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string line; while(getline(cin,line) { int sum = 0, x; stringstream ss(line); while(ss>>x) { sum += x; } cout << sum << endl; }