字符串(string)输入的函数
阅读(168)

一、getline( ) 


int main()
{
    string line:
    while(getline(cin,line))
    cout<<line<<endl;
    return 0;
}
getline()的原型:
头文件:#include <string>
istream& getline ( istream &is , string &str , char delim );
其中,istream &is 表示一个输入流,譬如cin;
string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);
char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。

给大家举个例子:
string line;
cout<<"please cin a line:";
getline(cin,line,'#');
cout<<"The line you give is:"<<line<<endl;

那么当我输入"You are the #best!" 的时候,输入流实际上只读入了"You are the ",#后面的并没有存放到line中(应该是在缓冲区里吧)。然后程序运行结果应该是这样的:
 please cin a line:You are the #best!
 The line you give is:You are the 
while(getline(cin,line))语句

注意这里默认回车符停止读入,按Ctrl+Z或键入EOF回车即可退出循环。
在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。在这种情况下,我想只要你的电脑不中毒不发神经你的输入流怎么会没有效?所以这种情况下不管你怎么输入都跳不出循环,因为你的输入流有效,跳不出循环。
然而有些同学误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数。
所以,以下的写法根本不可能让你推出while()循环的:
while(getline(cin,line))
cout<<line<<endl;
二、cin.getline()
此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。其语法为:
cin.getline(字符指针(char*),字符个数N(int),结束符(char));
#include "stdafx.h"
#include<iostream>
#include <stdio.h>
#include <string>
using namespace std;
 
int main()
{
   char a[30];
   cout << "请输入一个字符串:" << endl;
   cin.getline(a, 10);//第10位存放字符串结束符'\0'
   for (int i = 0; i<10; i++)
      cout << "第"<<i+1<<"个值为:"<<a[i] << endl;
 
   return 0;
}
输入:1234567890123

输出:1 2 3 4 5 6 7 8 9 _ (第10位存放字符串结束符'\0')
共有9份作业   我来完成作业
作业 等老师 解密后公开
张哲涵
作业 等老师 解密后公开
俞烽
作业 等老师 解密后公开
徐一铖
作业 等老师 解密后公开
徐一白
作业 等老师 解密后公开
张亦驰
作业 等老师 解密后公开
吴昀帆
作业 等老师 解密后公开
章语桐
作业 等老师 解密后公开
俞悦
作业 等老师 解密后公开
梁子媛