C++字符串的⼏种输⼊⽅法(string和字符数组)ps:本⽂⼤部分内容参考于,在这⾥加⼊了⾃⼰对这些函数在字符数组和string变量的理解和总结。
C++中的输⼊⼤致有6种⽅法:cin,(),line(),gets(),getchar()
1,cin
⽤法⼀:最常⽤的⽅法,接收⼀个字符串,⽆论是string还是char a[10],都是⼀样,但是遇到“空格”,“TAB”,"回车"都结束。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
cin >> a >> b;
cout << a << endl;
cout << b << endl;
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[10];
cin >> a ;
cout << a << endl;
return 0;
}
遇到空格只读⼊之前的数据
2,()
⽤法⼀:(字符变量名)可以⽤来接收字符
#include<string>
using namespace std;
int main()
{
char ch;
ch = ();//或者是(ch);
cout << ch;
return 0;
}
⽤法⼆:(字符数组名,接收字符个数),⽤来接收⼀⾏字符串(可以接收空格),这个最⼤的⽤途是可以定量的接收字符的个数(但是要注意,如果定义的数组的个数是20,则实际上只能接收19个字符,还要加上'\0')
这个⽅法只能正针对于是字符数组,不能使⽤string来输⼊。
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
<(a, 20);
cout << a;
return 0;
}
⽤法三(直接copy):(⽆参数)没有参数主要是⽤于舍弃输⼊流中的不需要的字符,或者舍弃回车,弥补(字符数组名,接收字符数⽬)的不⾜,其实质是相当于是getchar();
using namespace std;
int main(void)
{
char arr[10];
<(arr,10);
<();//⽤于吃掉回车,相当于getchar();
cout<<arr<<endl;
<(arr,5);
cout<<arr<<endl;
system("pause");
return 0;
}
输⼊abcdefghi
输出abcdefghi
输⼊abcde
输出abcd
请按任意键继续
#include <iostream>
using namespace std;
int main(void)
{
char arr[10];
<(arr,10);
//();//⽤于吃掉回车,相当于getchar(); 现在把这⾏注释掉试试看
cout<<arr<<endl;
<(arr,5);
cout<<arr<<endl;
system("pause");
return 0;
}
输⼊abcdefghi
输出abcdefghi
请按任意键继续
line()
可以接收空格,并且输出。浅显的⽤法其实和()差不多。(也不能使⽤string来进⾏输⼊)
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
cout << a;
return 0;
}
更加深层的⽤法其实就是line()的原型,这个函数本来有三个参数,分别是字符串的位置,接受个数,结束字符。如果将例⼦中line()改为line(m,5,'a');当输⼊jlkjkljkl时输出jklj,输⼊jkaljkljkl时,输出jk
当⽤在多维数组中的时候,也可以⽤line(m[i],20)之类的⽤法:
#include<string>
using namespace std;
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输⼊第"<<i+1<<"个字符串:"<<endl;
}
cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
}
4,getline()
接收⼀个字符串,可以接收空格并输出,不过要包含#include<string>
这也就弥补了之前line()和()的不能读取string的⼀个⼩的弊端
这⾥还要将这个写法稍微改正⼀下getline(cin,字符串数组名);
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);
cout << s;
return 0;
}
5,gets()
接收⼀个字符串,可以接收空格并且输出,需要包含#include<string>
但是这个函数有些奇葩的是,这个函数必须要包含头⽂件string,但是这个函数却不能直接对变量string来进⾏赋值。
#include<iostream>
#include<string>
using namespace std;
int main()
{
char s[10];
gets_s(s);
cout << s;
return 0;
}
这⾥提⼀下,这个函数由于不安全,在VS2015及以后的IDE中就不存在这个函数,⽽是⽤gets_s()函数来代替。具体的信息请个⼈感觉这个函数和line()没啥区别,只不过是line中多处⼀个参数。
获取单个字符,需要包含#include<string>。
这个函数尽量少⽤
#include<iostream>
using namespace std;
main ()
{
char ch;
ch=getchar(); //不能写成getchar(ch);
cout<<ch<<endl;
}
最后来⼀个各个函数对变量string的输⼊的总结:
在解决⼀些ACM的算法题的时候,可以尽量的使⽤字符数组。⼀般我更加偏好于使⽤getline()函数,毕竟对各个类型的字符串都兼容。
include和contain
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论