1. 字符串输入总结
1)cin
char a[20];
cin >> a;
cout << a << endl;
遇到空格结束
2)cin.get()
用法1: cin.get(字符变量名)可以用来接收字符
#include
using namespace std;
main ()
{
char ch;
ch=cin.get(); //或者cin.get(ch);
cout<
输入:how are you
输出:h
用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格.
#include
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout< }
输入:jkl jkl jkl
输出:jkl jkl jkl
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')
用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
3)cin.getline() // 接受一个字符串,可以接收空格
#include
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<
输入:jkljkljkl
输出:jklj
接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;
如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl
输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf
//延伸:
//cin.getline()实际上有三个参数,cin.getline(接受字符串的名称m,接受个数5,结束字符)
//当第三个参数省略时,系统默认为'\n'
//如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk
//亲测cin.get也支持cin.get(a,'\n')的形式,中间还可以加上size参数来限定输入长度,cin.get(a,20,'\n').二者的区别在于cin.get会保留enter时产生的'\n'在缓存区中,而cin.getline则会忽略.
当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:
#include
#include
using namespace std;
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输入第"< cin.getline(m[i],20);
}
cout< } 请输入第1个字符串: 请输入第2个字符串: 请输入第3个字符串: 输出m[0]的值:kskr1 4)getline() // 接受一个字符串,可以接收空格并输出,需包含“#include #include 输入:jkljkljkl 输入:jkl jfksldfj jklsjfl 和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数 //关于get()和getline(),为了更好地说明二者的区别,下面分为三种情况来看: 2.获得字符数组的长度及字符串数组的长度 其中对于int类型的数组,使用如下获得数组的长度: int a[20]; int length=size(a); int length=sizeof(a)/aizeof(a[0]);
cout<<"输出m["<
kskr1
kskr2
kskr3
输出m[1]的值:kskr2
#include
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<
输出:jkljkljkl
输出:jkl jfksldfj jklsjfl
1)输入的字符串不超过限定大小
get(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'直接从输入缓冲区中删除掉,不会影响下面的输入处理。
2)输入的字符数超出限定的大小
get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。
3)输入一个空行(即直接回车)
get(str,Size):str将得到'\0',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';
getline(str,Size):str将得到'\0',并将'\n'删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。int main() {
cout << "使用char获得数组的长度" << endl;
char studs[] ="how are you!";
cout << sizeof(studs) / sizeof(studs[0])<