输入字符串的方式

C++中常用的几种输入字符串的方式

1.scanf

scanf如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理

#include 
using namespace std;
int main (){
	char s[100];
	scanf("%s",s);
	printf("%s",s);
}
//输入123123 123123
//输出123123

2. cin

cin输入遇到空格、回车、Tab就结束输入,进入下个输入

#include 
using namespace std;
int main (){
	char s[100];
	cin>>s;
	cout<<s;
}
//输入123123 123123
//输出123123

3. cin.get

用法一: cin.get(无参)
cin.get()用法和getchar()类似

#include 
using namespace std;
int main (){
	char ch;
	ch=cin.get(); //获取一个字符
//	cin.get(ch);//第二种形式
	cout<<ch<<endl;
}
//输入:123123
//输出:1

用法二: cin.get(变量名)
cin.get(字符数组名,接受字符个数)可以接受一行字符,可以接受空格

#include 
using namespace std;
int main (){
	char a[20];
	cin.get(a,20); //可以输入多个字符串,中间空格隔开。
	cout<<a<<endl;
}
//输入:123 123 123
//输出:123 123 123//输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
//输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')

4. cin.getline()

可以接受空格,遇到换行停止
用法一:cin.getline(字符数组名,字符个数)
用法二:cin.getline(字符数组名,字符个数,结束字符)
上面两种用法第一种是默认’\n’结束,第二种是结束字符结束
结束字符不会被读入
实际字符串只有(字符个数-1) 个字符,因为最后一个字符为’\0’

#include 
using namespace std;
int main (){
	char m[20];
	cin.getline(m,5); //与上面基本相同。
	cout<<m<<endl;
	cin.getline(m,5,'x');
	//当设置了结束字符后,在结束字符之前输入换行不会影响字符的输入,此时的换行会存入字符串中
	cout << m;
	return 0;
}
输入 
123123
输出
1231//接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出

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

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

5.getline

能接受空格输入,用法和上一种基本相同
输入一个字符串
用法一:getline(字符串名,字符个数)
用法二:getline(字符串名,字符个数,结束字符)
上面两种用法第一种是默认’\n’结束,第二种是结束字符结束
结束字符不会保存在字符串中

#include
#include
using namespace std;
int main (){
	string str;
	getline(cin,str);
	cout<<str<<endl;
	getline(cin,str,'x');
	//当设置了结束字符后,在结束字符之前输入换行不会影响字符的输入,此时的换行会存入字符串中
	cout << str;
}
输入:123123
输出:123123

和cin.getline()类似.
但是cin.getline()属于istream流.
而getline()属于string流,是不一样的两个函数

6.gets()

能接受空格,并在输入换行后在字符串结尾添加’\0’。
需要头文件#include< cstring >或#include< string.h >

#include
#include
using namespace std;
int main (){
	char str[100];
	gets(str);
	cout<<str<<endl;
}
输入123123
输出123123

gets很方便但是有个缺点,就是不能输入string类,还有就是输入数组时可能会有越界的风险。

你可能感兴趣的:(c语言学习)