【说明】文章主要是记录自己在阅读别人东西后的一些归纳总结,目的在于对于知识点的掌握及以后复习之用,已经标注转载!
一、cin函数
——适合单个字符的输入,遇到空格、制表符和换行符自动停止读入
——同样适合连续的不含空格、制表符和换行符的字符串的输入
#include<iostream>
using namespace std;
void main()
{
char a[20];
cin>>a;
cout<<a<<endl;
}
输入:abcd 输出:abcd
二、字符串的输入
(1)String类——针对字符串长度未知
#include<iostream> //标准输入输出流头文件
#include<string> //由于后面实例化String对象,因此这里的头文件不能少
using namespace std;
int main()
{
string str;
char temp;
cout<<"输入字符串,按回车键结束输入"<<endl;
while((temp=cin.get())!='\n')
{
str +=temp;
}
const int LEN =str.length(); //str是String的一个对象,length是成员函数
char* dest = new char[LEN]; //根据输入字符串的长度,创建字符数组
for(int i = 0;i<LEN;i++) //将字符串保存到字符数组中
{
dest[i]=str[i];
cout<<dest[i];
}
cout<<endl;
delete dest; //此处销毁new开辟的空间不能忘记
system("pause");
return 0;
}
输入:I Love C++! 按回车后输出:I Love C++!
注意上述程序结束字符串输入的条件是:while((temp=cin.get())!='\n')。 如果将其改成 while((temp=cin.get())!='X'),则输入结束的条件是:X
例如输入:abcd efghjj 则输出:abcd efghjj
tiandi tongX tianditong
#include <iostream>
using namespace std;
int main()
{
char str[10];
cin.get(str, 10);
cout << str << endl;
cout<<strlen(str)<<endl; //如果输入10字符,只会显示9个
return 0;
}
②cin.get()——实际上用于读取单个字符。
首先看看cin.get(),它是一个读取单个字符的方法.
字符变量=cin.get();相当于cin.get(字符变量);
如果输入如下代码:
#include <iostream>
using namespace std;
void main()
{
char astr,bstr;
astr=cin.get();<span style="white-space:pre"> </span>//输入一个字符
bstr=cin.get();
cout<<astr<<bstr<<endl;
}
输入:abcd 最后输出了:ab 既然cin.get()是读取第一个字符,那bstr为什么不也是a呢? 其实原理是这样的: 在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,但事实上是cin里封装的一个东西。当我们在程序上输入字符后,对象cin获得了我们输入的字符,例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给astr,这时,cin里储存的流的数据为bcd,而cstr则获得了a.当我们再次运行bstr=cin.get();时,同理把cin里流的数据的b拿出来给了bstr,此后,cin里面的流的数据为cd,而bstr则为b,所以最后输出时,便能输出ab了。
还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据。我们再输入字母'b',按回车后便输出ab了。相信到这里,大家都应该明白了,因为当我们第一次输入a后,通过astr=cin.get();使cin里的流没有数据,清空了。所以到第二次要再赋给bstr值时,它找不到数据,要重新再输入数据.由此来看可以知道,当cin里的流数据清空时,便需要重新输入才能赋值。而cin.get()还有个用法:
#include <iostream>
using namespace std;
void main()
{
char astr,bstr;
astr=cin.get();
cin.get();
bstr=cin.get();
cout<<astr<<bstr<<endl;
}
程序中有3个cin.get(),所以我们尝试输入:abc 发现输出了:ac 由此能知道,当空回调cin.get();时,cin.get便自动在cin中的流数据中删除一个字母,起了一个删除作用.
另外,get()将换行符保留在输入序列里,所以,再使用cin.get()输入多行数据时,中间可以使用get()消除换行符。
#include <iostream>
using namespace std;
int main()
{
char str1[30], str2[30];
cin.get(str1, 30);
cin.get();
cin.get(str2, 30);
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
return 0;
}
(3)cin.getline()
——原形: getline(char *line,int size,char='结束标识符') 第一个就是字符指针,第二个是字符长度,第三个1行的结束标识符,当该参数省略时,系统默认为'\0'
#include <iostream>
using namespace std;
void main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}
输入:abcde 输出:abcd 字符串长度为4最后一个字符为'\0'
——如果要输入多行字符串,而且其中包括空格、制表符或换行时,只需要将结束标示符设定为字符串中不会出现的字符即可。
#include <iostream>
using namespace std;
void main()
{
char cstr[200];
char bstr[200];
cin.getline(cstr,sizeof(bstr),'['); //我们以单个英文字母'X'作为终止标识符
cin.getline(bstr,sizeof(cstr),']');
cout<<"第一行是:"<<cstr<<endl;
cout<<"第二行是:"<<bstr<<endl;
system("pause");
}
输入:ab
cd
输出:ab
cd