您的位置:首页 > 编程语言 > C语言/C++

学习笔记31-C/C++字符串输入

2017-09-15 19:07 399 查看

1. cin>>

cin>>可以用来接收字符串,字符,数字等等类型。

但是注意:

cin>>会自动过滤空格,tab,回车等不可见字符,如果不想过滤可以使用noskipws进行控制。

#include<iostream>
using namespace std;
int main()
{
char ch[5];
for(int i=0;i<5;i++)
cin>>noskipws>>ch[i];
for(int i=0;i<5;i++)
cout<<ch[i];
cout<<endl;
return 0;
}


上面代码,输入“a b c”,并不会跳过空格,而是直接保存“a b c”。输入“a\nb\nc”,输出:

a

b

c

2. cin.get()

cin.get()只能用来接收字符串,可以接收空格,遇回车结束。它的参数如下:

cin.get(数组名,接收字符数目)

注意:

cin.get()默认接收的最后一个字符是“\n”,比如输入参数接收字符数目是n,如果输入的字符个数大于等于n,则实际接收前n-1个字符(包括空格),自动在后面添加一个“\n”,也就是数组最后一个字符是“\n”。

#include<iostream>
using namespace std;
int main()
{
char ch[5];
cin.get(ch,5);
cout<<ch<<endl;
}


上面代码输入“abcdefgh\n”,则实际上保存了“abcd\n”。

对于多出的部分,仍然存在于输入流中:

#include<iostream>
using namespace std;
int main()
{
char ch[5];
cin.get(ch,5);
cout<<ch<<endl;
char c[10];
cin>>c;
cout<<c<<endl;
return 0;
}


上面的代码,输入“abcdefgh\n”,实际上分成了两段,分别是:

“abcd\n”

“efgh\n”

3. cin.get()

这里跟上面的区别在于,get()没有输入参数,它的作用是清空输入流中残留的第一个字符。

注意:只能清除一个字符!

#include<iostream>
using namespace std;
int main()
{
char ch[5];
cin.get(ch,5);
cout<<ch<<endl;
char c[10];
cin.get();
cin>>c;
cout<<c<<endl;
return 0;
}


上面的代码。如果没有使用cin.get(),则输入“abcde\n”,输出:

abcd

e

输入“abcdefgh\n”,输出:

abcd

fgh

可以看出cin.get()的作用是清除了一个字符e。

4. cin.getline()

cin.getline()只能用来接收字符串,而且必须是char数组,不能是string类型。

它的输入参数如下:

cin.getline(字符数组名,接收字符个数,结束字符)

可以接收除了结束字符之外的所有字符,结束字符默认是回车。

它跟get()函数有点像,最后一个字符必须是“\n”,多出的字符抛弃。

#include<iostream>
using namespace std;
int main()
{
char ch[5];
cin.getline(ch,5);
cout<<ch<<endl;
return 0;
}


5. getline()

这个函数需要包含头文件string,用来接收空格,tab,回车等。它的参数如下:

getline(cin,string)

它跟cin.getline()有一个很大区别:

1. cin.getline()接收的是字符数组,而不是string类型。

2. cin.getline()会默认在字符数组的最后加上一个’\0’,而getline()不会加上’\0’。

#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);
cout<<s<<endl;
return 0;
}


下面这些是C语言的函数:

6. gets_s()

gets()功能有点类似cin.getline(),可以接收空格,tab等,遇到回车结束,而且只能用于字符数组。默认在输入的最后加上一个’\0’,终止字符。

gets()函数在C11标准中已经被移除,在C++11标准中被标记为过时,在C++14标准中被移除。

因为gets()不执行边界检查,所以是不安全的。

可以使用gets_s(),fgets()代替。

gets_s()跟gets()功能可以看成是一样的:

char * gets_s ( char * str,rsize_t n )

但是它的参数比gets()多了一个,第二个参数限制读入的最大字符个数,如果输入超过这个限制会报错。

fgets()有三个参数:

char *fgets(char *buf, int bufsize, FILE *stream);

#include<stdio.h>
int main()
{
char c[20];
gets_s(c);
printf("%s\n",c);
return 0;
}


7. getchar()

getchar()函数用来得到一个字符,没有输入参数。

#include<stdio.h>
int main()
{
char c;
c=getchar();
printf("%c\n",c);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c-c++