ps:本文大部分内容参考于这篇博客,在这里加入了自己对这些函数在字符数组和string变量的理解和总结。

C++中的输入大致有6种方法:cin,cin.get(),cin.getline(),gets(),getchar()

1,cin
用法一:最常用的方法,接收一个字符串,无论是string还是char a[10],都是一样,但是遇到“空格”,“TAB”,"回车"都结束。

#include<iostream>
#include<string>
using namespace std;
int main()
{string a, b;cin >> a >> b;cout << a << endl;cout << b << endl;return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{char a[10];cin >> a ;cout << a << endl;return 0;
}

遇到空格只读入之前的数据

 2,cin.get()

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

#include<iostream>
#include<string>
using namespace std;
int main()
{char ch;ch = cin.get();//或者是cin.get(ch);cout << ch;return 0;
}

用法二:cin.get(字符数组名,接收字符个数),用来接收一行字符串(可以接收空格),这个最大的用途是可以定量的接收字符的个数(但是要注意,如果定义的数组的个数是20,则实际上只能接收19个字符,还要加上'\0')

这个方法只能正针对于是字符数组,不能使用string来输入。

#include<iostream>
#include<string>
using namespace std;
int main()
{char a[20];cin.get(a, 20);cout << a;return 0;
}

用法三(直接copy):cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足,其实质是相当于是getchar();

#include <iostream>
using namespace std;int main(void)
{char arr[10];cin.get(arr,10);cin.get();//用于吃掉回车,相当于getchar();cout<<arr<<endl;cin.get(arr,5);cout<<arr<<endl;system("pause");return 0;
}输入abcdefghi
输出abcdefghi
输入abcde
输出abcd
请按任意键继续#include <iostream>
using namespace std;int main(void)
{char arr[10];cin.get(arr,10);//cin.get();//用于吃掉回车,相当于getchar(); 现在把这行注释掉试试看cout<<arr<<endl;cin.get(arr,5);cout<<arr<<endl;system("pause");return 0;
}输入abcdefghi
输出abcdefghi
请按任意键继续

3,cin.getline()
可以接收空格,并且输出。浅显的用法其实和cin.get()差不多。(也不能使用string来进行输入)

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

更加深层的用法其实就是cin.getline()的原型,这个函数本来有三个参数,分别是字符串的位置,接受个数,结束字符。
如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk
当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:

#include<iostream>
#include<string>
using namespace std;
​
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
cin.getline(m[i],20);
}
​
cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
​
}

4,getline()
接收一个字符串,可以接收空格并输出,不过要包含#include<string>
这也就弥补了之前cin.getline()和cin.get()的不能读取string的一个小的弊端
这里还要将这个写法稍微改正一下getline(cin,字符串数组名);

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

5,gets()
接收一个字符串,可以接收空格并且输出,需要包含#include<string>
但是这个函数有些奇葩的是,这个函数必须要包含头文件string,但是这个函数却不能直接对变量string来进行赋值。

#include<iostream>
#include<string>
using namespace std;
int main()
{char s[10];gets_s(s);cout << s;return 0;
}

这里提一下,这个函数由于不安全,在VS2015及以后的IDE中就不存在这个函数,而是用gets_s()函数来代替。具体的信息请点击这里!

个人感觉这个函数和cin.getline()没啥区别,只不过是cin.getline中多处一个参数。

6.getchar()
获取单个字符,需要包含#include<string>。
这个函数尽量少用

#include<iostream>
using namespace std;
main ()
{
char ch;
ch=getchar(); //不能写成getchar(ch);
cout<<ch<<endl;
}

最后来一个各个函数对变量string的输入的总结:

在解决一些ACM的算法题的时候,可以尽量的使用字符数组。一般我更加偏好于使用getline()函数,毕竟对各个类型的字符串都兼容。

C++字符串的几种输入方法(string和字符数组)相关推荐

  1. C语言中字符串的两种赋值方法 - 指针赋值和数组赋值

    在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值.当然在C++ 中也是可以的,C++是C的超集嘛,在C++中包含了C的所有功能: 1.指针式赋值. 通过 ...

  2. java的四种输入方法,你会几种?

    java的输入方法最常见的就是Scanner的方法,我经过查阅一些资料发现了输入方法原来还有那么多种,可以玩出不少花样,下面是我总结出的四种输入方式,有需要的可以拿去 1.Scanner相关的功能 S ...

  3. php随机字符串的四种生成方法

    下面介绍生成随机字符串的四种基本方法: 方法一: 1.在33 – 126中生成一个随机整数,如35. 2.将35转换成对应的ASCII码字符,如35对应#. 3.重复以上1.2步骤n次,连接成n位的密 ...

  4. Java黑皮书课后题第8章:**8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次。编写一个程序,提示用户输入数字n和字符数组

    **8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 **8.36 ...

  5. android 数组赋值字符串_C语言奇淫技巧,字符串的三种表示方法,不会用不是合格的程序员...

    1.在C语言中,是将字符串作为字符数组来处理的,字符串是逐个存放到数组元素中的 例如用一个一维的字符数组存放字符串"I am a boy.",如下代码: char c[12] = ...

  6. 回文字符串的两种判别方法(c语言)

    C语言判别回文字符的两种简单方法 文章目录 C语言判别回文字符的两种简单方法 一.回文字符串的概念 二.介绍两种判别回文字符串的方法 1.将需要判别的字符串倒序排列再与原字符串对比 2. 通过指针锁定 ...

  7. C中字符串的几种定义方法及说明

    出处:http://hanxuedog.iteye.com/blog/1299186 在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 1.字符串常量 即:位于一对双括号中的任何 ...

  8. 版权符号©的4种输入方法

    [摘自 http://calvin.blog.com.cn/archives/2005/40564.shtml] 版权符号©有很多种方法可以实现,如下: 1.按住Alt键不放,然后输入169.松开 ...

  9. MFC中CString类字符串与长整型、浮点型、字符数组char数据之间的相互转换

    一.长整型数据与CString类字符串相互转换 1.将长整型数据转换为CString字符串类 CString str; long ld; str.Format(_T("%ld"), ...

最新文章

  1. 配置SSH是出现: sign_and_send_pubkey: signing failed: agent refused operation Permission denied
  2. 【Java基础】对象拷贝
  3. 五分钟带你入门TensorFlow
  4. 如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作
  5. python 学习源
  6. linux安装java jdk_Linux安装JDK详细步骤
  7. oracle需求分析,8-oracle_分析函数(二)
  8. jdk8集合类流_JDK 8中的流驱动的集合功能
  9. java 大文件 处理_用Java处理大文件
  10. SSIA的完整形式是什么?
  11. 物联网操作系统Hello China V1.76(PC串口版)版本发布
  12. 解决问题 xcrun: error: invalid active developer path
  13. [FFmpeg] 编译官方例子
  14. linux 防火墙配置命令
  15. P1754 球迷购票问题 (卡特兰数,递推)
  16. 为什么python代码运行不了_Python | 为什么优化代码?
  17. C和C++的二进制,八进制,十六进制输出格式(全面版)
  18. 计算机资源管理器经常停止运行,解决win10资源管理器经常停止工作的方法
  19. 【飞书集成自建应用教程】
  20. 产生式规则实现动物、手机识别系统

热门文章

  1. usb 键盘码表_ASCII码表,键盘按键码表,虚拟键盘按键码表
  2. 网络安全笔记-Web架构
  3. STM32F105RBT6 uart调试
  4. OA系统资产管理借力工作流,覆盖从采购申请-报废的全过程
  5. 联想笔记本电脑开机黑屏可能是什么原因
  6. 计算机桌面颜色异常怎样修复,电脑显示器变色怎么办?显示器颜色异常的原因及解决方法...
  7. “甲流疫情死亡率”较标准程序
  8. 如何进行APP抓包 ? - 学习/实践
  9. 爱运动的人身体都不差----基于墨刀原型工具的健康软件设计
  10. 微信的红包算法 了解一下两种就可以了