C++中的输入

读取函数

gets

fgets

scanf

getline

cin

所用时间

72ms

76ms

960ms

2189ms

2275ms

我们可以发现gets和fgets函数读取字符串的速度是最快的,读取时间约为scanf函数的1/13,约为getline和cin的1/30,由于gets函数由于不安全已被c11标准废弃,在以后读取字符串时,如果字符串很长,应尽可能使用fgets函数。

另外,scanf函数的读取效率约为getline和cin的1/2,getline比cin稍快。

 

那么为什么会出现这样的情况呢?

以fgets函数和scanf函数为例,由于fgets只负责读取字符串,而scanf函数还可以读取其他如int、double类型的数据,所以scanf函数就多了确定读取的数据是何种类型的步骤,因而花费了更多的时间。

而getline和cin函数只能向string类型中读入数据,由于string类型是在堆上分配的,在读取数据的时候需要不断从堆上申请动态分配内存,不如char数组直接提前分配好了所有内存来得更为简便。此外在向string类型读入数据的时候,还需要调用string类型的构造函数,初始化包括begin()、end()、size()等类内数据成员和成员函数,这也花费了很多时间。所以string类型比char数组提供了许多使用更为简便的函数和成员,但也要为此承担时间上的代价。

在学习C++的过程中,经常会遇到输入输出的问题,以下总结一下下面几个函数的用法: 
1)、cin 

遇“空格”、“TAB”、“回车”都结束
2)、cin.get() 

用法1: cin.get(字符变量名)可以用来接收字符

用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
3)、cin.getline()  // 接受一个字符串,可以接收空格并输出

 m[20];
  cin.getline(m,5);
  cout<<m<<endl;
4)、getline() 
5)、gets()

6)fgets();

  1. # include <stdio.h>
  2. int main(void)
  3. {
  4. char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
  5. printf("请输入一个字符串:");
  6. fgets(str, 7, stdin); /*从输入流stdin即输入缓冲区中读取7个字符到字符数组str*/
  7. printf("%s\n", str);
  8. return 0;
  9. }

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值