字符串常用输入方法总结
前言: 个人是从两个角度去比较思考总结的 (1)能否输入空格 (2)输入支持的是 ①单个字符 ②还是char[]字符数组 ③还是string类字符串
1.scanf("%c",&s);
只输入char型的单个字符
#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
char s;
scanf("%c",&s);
cout<<s;
}
//输入:abc
//输出:a
2.scanf("%s",s);
输入一个字符串,但不包含空格
只能输入char型字符数组,不能输入string类字符串
#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
char s[100];
scanf("%s",s);
cout<<s;
}
//输入:abc
//输出:abc
//输入:abc abc
//输出:abc
3.getchar()
getchar()只能输入char型的单个字符 putchar()向终端输出一个字符
getchar()与putchar()函数包含在头文件<stdio.h>里,属于C语言的函数,C++也可以兼容,但不建议使用。
#include<iostream>
#include <cstdio>
using namespace std;
int main()
{
char s;
s=getchar();//不能写成getchar(s);
cout<<s;
}
//输入:abc
//输出:a
4.gets()
接受一个字符串,可以接收空格,直到遇到换行停止输出,需包含#include<cstring>
#include<iostream>
#include <cstdio>
using namespace std;
int main ()
{
char s[20];
gets(s); //不能写成s=gets();
cout<<s<<endl;
}
//输入:abcabcabc
//输出:abcabcabc
//输入:abc abc abc
//输出:abc abc abc
**注意:**C++11标准后,已经不支持gets()函数了。但C语言中gets()提交代码时可以使用。
5.cin>>
接受一个字符串,遇“空格”、“Tab”、“回车”都结束
可以输入char型字符数组,也能输入string类字符串
#include<iostream>
using namespace std;
int main ()
{
char s[20];
cin>>s;
cout<<s<<endl;
}
//输入:abcabcabc
//输出:abcabcabc
//输入:abc abc abc遇空格结束,所以不能输入空格
//输出:abc
6.cin.get()
用法一:能获取输入一个字符
#include<iostream>
using namespace std;
int main ()
{
char s;
s=cin.get();
cout<<s<<endl;
}
//输入:abc
//输出:a
用法二:也可以输入字符数组并且可以接受空格
只能输入char型字符数组,不能输入string类字符串
#include<iostream>
using namespace std;
int main ()
{
char s[100];
cin.get(s,99);//输入范围可以写大点
cout<<s<<endl;
}
//输入:abcabcabc
//输出:abcabcabc
//输入:abc abc abc
//输出:abc abc abc
用法三:cin.get()可以吃掉回车,可以回车后再输入一串字符
#include <iostream>
using namespace std;
int main()
{
char s[10];
cin.get(s,10);
cin.get();//用于吃掉回车,相当于getchar();
cout<<s<<endl;
cin.get(s,5);
cout<<s<<endl;
system("pause");
return 0;
}
//输入abcdefghi
//输出abcdefghi
//输入abcde
//输出abcd
//请按任意键继续
7.cin.getline()
接受一个字符串,可以接收空格并输出
只能输入char型字符数组,不能输入string类字符串
cin.getline()实际上有三个参数,cin.getline(接受字符串,接受个数,结束字符),当第三个参数省略时,系统默认为’\0’ 是’/n’
#include<iostream>
#include <string>
using namespace std;
int main ()
{
char s[100];
cin.getline(s,10);
cout<<s<<endl;
}
//输入:abcabcabc
//输出:abcabcabc
//输入:abc abc abc
//输出:abc abc a 只输入了10个长度的字符串 ,其中最后一个为'\0',所以只看到9个字符输出;
8.getline()
接受一个字符串,可以接收空格并输出,getline()顾名思义就是将整行的所有字符读到字符串中
注意输入字符串的是string类的字符串,不能输入char型字符数组,需头文件#include<string>
getline()和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
#include<iostream>
#include <string>
using namespace std;
int main ()
{
string s;
getline(cin,s);
cout<<s<<endl;
}
//输入:abcabcabc
//输出:abcabcabc
//输入:abc abc abc
//输出:abc abc abc
9.scanf("%[^\n]",s)
接受一个字符串,可以接收空格并输出,头文件#include <cstdio>
只能输入char型字符数组,不能输入string类字符串
#include<iostream>
#include <cstdio>
using namespace std;
int main ()
{
char s[100];
scanf("%[^\n]",s);
cout<<s<<endl;
}
//输入:abcabcabc
//输出:abcabcabc
//输入:abc abc abc
//输出:abc abc abc
^表示"非",[^\n] 表示读入换行字符就结束读入。这个是scanf的正则用法,我们都知道scanf不能接收空格符,但是使用%[^\n] 就可以了。
|