洛谷 超级详解 P5015 [NOIP2018 普及组] 标题统计 能力提升综合题单1.3

输入:一串字符串,包含空格

输出:字符串不包含空格外其他所有元素的个数

思路:输入的字符储存在数组内所以要先创造一个数组(哎我去,这大水印)

这里输入的空格是没有用的,而在c语言中众多输入函数中有一个scanf,它的特性是遇到空格自动停止输入,然后剩下未输入的字符在输入流中等待下一次scanf的输入。

所以我们可以多次循环输入字符串,将不含空格的字符串输入数组内。但输入的字符串中究竟有几个空格,需要循环几次呢,这是我们不知道的,所以我们可以用while循环判断scanf是否返回EOF来决定循环几次。

然后每次循环输入时,将字符串输入scanf的什么位置呢,自然我们知道的是要接着连续的输入数组,而如果直接以数组名地址放入scanf函数中形如scanf(“%s”,num)每次循环放入的位置都是数组第一位,例如输入”abc  de“则在第一次输入后num的前三位存入abc但是第二次循环还是在数组第一位输入则结果使得数组前二位变成了de,最终的数组存入结果为dec,显然是不符合我们的想法的。

则我们如何解决嘞,则我们可以手动取在数组的哪个地址存入,实现方法为:设置一个变量k代表为数组的位置,每次循环输入后,strlen统计数组中已存入的元素数=k。因为数组是从0开始的,所以要将k-1,才代表了实际要存入的数组的位置。配合上一段的while循环实现为

然后最终存入了不含空格的全部字符串

finally,打印出数组内元素数就好了

全部代码参上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值