cin,scanf,gets,getline,cin.getline对于字符串的输入

 1 //cin: 
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 int main()
 9 {
10   char a[20];
11   cin>>a;
12   cout<<a<<endl;
13 }

cin只接收一个字符串,遇空格,回车就结束
输入:jkljkljkl
输出:jkljkljkl

输入:jkljkl jkljkl //遇空格结束
输出:jkljkl

 

 

 

 1 //cin.getline : 
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 int main()
 9 {
10   char a[20];
11   cin.getline(a,5);
12   cout<<a<<endl;
13 }

<iostream>
接收一个字符串,可以接收空格并输出
输入:jkljkljkl
输出:jklj

输入:ab fvtd
输出:ab f

接收5个字符到a中,其中最后一个为'\0',
所以只看到4个字符输出;

如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl

输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf

延伸:
1、cin.getline()实际上有三个参数,
cin.getline
(接收字符串的变量,接收字符个数,结束字符)
2、当第三个参数省略时,系统默认为'\0'
3、如果将例子中cin.getline()
改为cin.getline(a,5,'a');
当输入jlkjkljkl时
输出jklj,
输入jkaljkljkl时,
输出jk




输入:
qwertyuiop
qwert 123 456
isabvgfewrjnv kjsbd

输出:
qwertyuiop //m[0]
qwert 123 456 //m[1]
isabvgfewrjnv kjsbd //m[2]

 

 

 

 1 cin.getline 在多维数组里的用法:
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 int main()
 8 {
 9   char a[3][20]; //大概3是限制字符串个数的
10            //20是限制每个字符串长度的 。大概吧。
11   for(int i=0;i<3;i++) 
12            //这个地方必须从0开始 
13   cin.getline (a[i],20);
14   for(int i=0;i<3;i++)
15   cout<<endl<<a[i];
16   return 0;
17 } 

 




<cstring>
接收一个字符串,可以接收空格并输出。
输入:jkljkljkl
输出:jkljkljkl

输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl

 

 1 getline: 
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 using namespace std;
 8 int main()
 9 {
10   string a;
11   getline(cin,a);
12   cout<<a<<endl;
13 }

 

 

 

 1 gets():
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 int main()
 8 {
 9   char a[22];
10   gets(a);
11   printf("%s",a);
12 }

 


<cstdio>
gets可以读空格,但不读回车
字符串接收结束后自动加'\0'。
(应该是用'\n'代替了'\0')
输入: EAFWEG GEWsdv(\n)
输出: EAFWEG GEWsdv

 

 1 scanf():
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 int main()
 8 {
 9   char a[22];
10   scanf("%s",a);
11   printf("%s",a);    
12 }

 


<cstdio>
不接收空格,回车
输入:
wrbe awegfre
输出:
wrbe

 

getchar():
只接收一个字符(第一个)

参考: http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html

posted @ 2018-03-30 20:43  孟东行#  阅读(549)  评论(0编辑  收藏  举报