【关于c/c++中读入带空格字符串的办法】

目前常用的读入字符串方法是使用cin>>a或scanf("%s",a),但因为cin和scanf()默认读到空格、\t、\n就停止,所以并不能读入带空格的字符串,这就让人在一些必须获取带空格字符串时很头大。上网查了以后发现用以下两种方法完美解决:

一、使用gets()函数

gets()可以说是一个相当强大的获取字符串函数(就目前我的认知来看==),

使用方法是    gets(数组名或指针)      成功时返回读入的字符串的指针,失败时返回NULL,因此也能用gets(str)!=NULL来完成与scanf("%s",str)!=EOF一样的功能。

gets()最大的好处是可以读入空格、\t和\n,并把\n作为结束的标志,读入到\n之前字符串
 

//请无视下面这段话,问题已解决,只是因为很有趣所以才保留这段话

/*(这里有存疑,参考blog上写的是“可接受回车键之前输入的所有字符,
并用'\n'替代 '\0'”,难道说是把最后的\0用\n替代?还是说把字符串中
间的\0当做\n?至少经过试验cb证明前一种说法不正确,但后一种说法很
蛋疼啊,每个字符串的截止字符不都是\0吗?姑且先持怀疑态度吧==)*/

二、将scanf("%s",str)中的%s替换为%[^\n]

参数"%[^n]"意为“一直读入,直到读到\n停止”,也就是说将默认的“读到空格、\n、\t停止”改成了“读到\n停止”,这就意味着能读入空格和\t啦!

(然而悲催的是,在cb中使用好像不能成功,程序一直读入字符串,不知道是我用错了还是怎么回事==,改天再试试)

//注意!!!以下全是现学现卖,因为还没实践所以基本是靠着自己的猜想写,很可能有差错,请谨慎阅读(最好别看==)

关于%[]的用法:

[]叫转换说明符

%[]表示仅读入[]内的字符,也就是说只要读到[]之外的字符立刻停止读入

举例:

scanf("%[123]",str);

输入1221231234123

那么在读到4时就停止读入,str接收的是122123123

而上面用的是%[^\n],^叫抑扬符,加了^后[]内的意思就恰好相反,也就是读到[]之内的字符立刻停止输入

举例:

scanf("%[^123]",str);

还是输入1221231234123,str一个字符也接收不到,因为第一字符'1'就属于"123"中的一个==

参考:

字符串处理之gets与scanf("%s")的区别 (注意这篇有个笔误,“可接受回车键之前输入的所有字符,
并用'\n'替代 '\0'”中\n和\0的位置反了,坑了我好久orz)

scanf/fscanf 的%[]和%n使用方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值