(转载)字符串操作

本文详细介绍了C++和C语言中用于输入整行字符串的不同方法,包括使用`getline`、`fgets`、正则表达式以及`scanf`函数。特别地,文章提到了在使用这些方法时需要注意的细节,如处理换行符和数组越界问题,并给出了相应的示例代码。
摘要由CSDN通过智能技术生成

原文

思路

本题考察字符数组的整行输入

假设我们有一个满足下面定义的字符数组:

C++

const MAX_LEN = 100;
char str[MAX_LEN];

然后希望输入一整行字符串。

太长不看版:

  • C++:使用cin.getline(str, MAX_LEN)
  • C语言:使用gets_s(str, MAX_LEN)
  • 想玩花活的(非必要不建议):使用scanf("%[^\n]", str)fgets(str, MAX_LEN, stdin)

具体的使用细节可以看下面的正文。

正文:

在比较早的C/C++版本中,经常可以看到推荐使用gets函数来进行整行字符串的输入,就像下面这样的简单写法即可输入一整行:

C++

gets(str);

但是当输入的字符串长度超过数组长度上限MAX_LEN时,gets函数会把超出的部分也一并读进来,并且会覆盖数组之外的内存空间,这就导致了一定的安全风险,因此C++11标准将gets函数废弃了,然后在C++14时将该函数移除,如果现在想要整行输入的话,推荐使用cin.getline函数(见下文);而在C语言标准中gets函数则是在C11时被移除,与此同时增加了gets_s函数(见下文),除此之外还有fgets函数可供选择。

下面对四种整行输入方法进行解释。

  1. cin.getline:仅C++可用,C语言不可用。需要添加#include <iostream>头文件,并且在头文件后增加一行using namespace std;。然后我们可以像下面这样使用,其中第一个参数是字符数组,第二个参数是最大允许读入的字符个数,设置为字符数组的长度即可。

C++

cin.getline(str, MAX_LEN);
  1. gets_s:仅C语言可用,C++不可用。用法如下所示,其中第一个参数是字符数组,第二个参数是最大允许读入的字符个数,设置为字符数组的长度即可。

C

gets_s(str, MAX_LEN);
  1. scanf("%[^\n]", str)C++C语言均可用。原理是使用scanf的正则表达式输入功能,其中%[^\n]的含义是 “只要不为\n,就一直读入”,也就是说它会读入到换行符结束(或者全部读完),即实现了读入整行的效果。关于正则表达式的内容留给有兴趣的同学了解,这里就不展开了。需要注意,这种方式不会把碰到的换行符处理掉,导致连续输入多行字符串的时候还要自己动手处理换行符,并不是很方便(可以参考 字符串输入输出II

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值