学习笔记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++ Primer Plus]学习笔记--每次读取一行字符串输入
- 字符串的输入与停止(如何输入空字符串)(C++ primer 学习笔记)
- C++每次读取一行字符串输入(学习笔记) (转)
- 【学习笔记】C++字符串输入输出
- C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)(复制粘贴,方便后面翻阅)
- C++基础学习系列--1、1的简陋版本--输入输出流与字符串变量的使用
- [学习笔记]C和C++中关于字符串的细小知识点
- C++学习笔记31,指向引用的指针(3)
- C++学习笔记 | 第三章 字符串、向量和数组 | (1)
- C++学习笔记之函数如何返回字符串(char型)
- more effective c++学习笔记 ---- 条款31
- 【C++】学习笔记十八——循环和文本输入
- [学习笔记][C++Primer Plus]使用cout格式化输出字符串,3q xuzhong
- C++学习笔记(第六章 指针的应用 字符串 引用 之二)
- C++学习笔记三:字符串、向量和数组
- 【C++ 学习笔记小程序01】 输入输出
- 【C++学习笔记】数组的输入
- 【学习笔记】C++传递字符串到C#
- 【TypeScript学习笔记】代码中反引号的作用-多行文本输入创建多行字符串