前言:
当前大家对“c语言长度怎么算”大体比较注重,我们都需要剖析一些“c语言长度怎么算”的相关资讯。那么小编同时在网上收集了一些关于“c语言长度怎么算””的相关文章,希望我们能喜欢,姐妹们快快来学习一下吧!今天这道题目呢,很直白,就是计算单词长度。
在程序中读入一行文本,其中以空格分隔为若个单词,以“.”为结束符号,要打印输出每个单词的长度,注意,这里的单词与语言无关,比方说It's算作为4个单词,也可能出现连续的空格,在最后出现“.”的时候,输入才算结束。
这道题目呢,也给了提示,在C语言中,用scanf函数来输入字符,scanf("%c",...)。
梳理逻辑
1、读入一行文本,使用scanf函数,然后字符的话,代表数据类型为char。
2、直到读到“.”为止,这里就需要用到一个while循环语句了,当读入的文本不等于“.”时,它才会输入,否则就会停止。
char text;//给出的一行文本 while(text!='.'){ scanf("%c",&text); }
3、接下来就是计数,以空格为一个单位,从第一个单词的第一个元素开始数,直到空格为止就停止,那么我们需要用到计数法。
假设我们只是输入“It's.”,那么在计数的时候会把“.”也给计数进去,所以需要在计数的基础上减去1才行,这是针对最后一个单词的计数方法,所以要写在循环外面。
那如果有空格的情况呢,我们就需要进行一个单独讨论了,
遇到空格之前,先进行正常计数,遇到空格后,就要重新计数,而空格之前的,是没有“.”的,所以只需要正常计数即可,之后呢,如果count!=0的话,那就可以打印一个空格,然后再把count复位成0,再进行之前的步骤即可。
else if(text==' '){ if(count!=0){ printf("%d", count); printf(" "); } count = 0; } } printf("%d",count-1);
可是到这一步呢,我进行了测试,却发现无法满足PAT平台要求的所有测试点,其中的“空句子”、“连续多个空格”、“开头结尾空格”都出现了问题。
那么我们先来思考一下空句子的情况,空句子的时候,就是只有一个“.”的时候,那么最后的count应该是要满足>1的情况下的,然后没有结果打印。
以及我上面写的仍存在一些问题,这个printf语句应该是写在if(count!=0)这个条件判断中的。
当我修改完这两个问题后,发现只剩下开头结尾空格仍存在问题了。
经过测试,我发现最终问题就在于,如果在“.”前有空格的话,在打印输出的结果中,数字末尾会出现空格符号。
那么这种情况是需要单独进行讨论的,也就是在我们的if(count!=0)这个条件语句中要进行分情况讨论。
这里呢,我在做题的时候没有想明白,于是我去网上查阅了相关资料,发现我们在这边需要单独进行一个标记,也就是每进行一次循环需要增加一个标记,如果标记不为零,那么就打印输出“ ”(空格),如果标记为零,那就没有打印输出“ ”空格。
代码实现
//单词长度#include<stdio.h>int main(){ char text;//给出的一行文本 int count = 0;//计数法 int sign = 0; while(text!='.'){//循环遇到“.”停止 scanf("%c",&text);//按照题目要求输入字符 if(text!=' '){ count++; } else if(text==' '){ if(count!=0){ if(sign!=0){//进行一个标记 printf(" "); } printf("%d", count); sign++;//每进行一次循环增加一个标记 } count = 0; } } if(count>1){ if(sign!=0){//标记不为0的时候,才会打印空格,而平常状态标记为0,不会打印空格 printf(" "); } printf("%d",count-1); }}结果测试总结
别看这道题目简单,但其实要梳理清楚这道题目的逻辑可没有想象中的那么简单,我在这道题目上也卡了不少时间。
标签: #c语言长度怎么算