基础编程题目集——7-26 单词长度**

23 篇文章 1 订阅

1 题目要求

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

输入格式:
输入在一行中给出一行文本,以.结束

提示:用scanf("%c",…);来读入一个字符,直到读到.为止。

输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

2 样例

输入样例:
It’s great to see you here.

输出样例:
4 5 2 3 3 4

3 分析

题目中要求使用scanf(),限定C语言。

- 计算每个单词的长度并输出,前后单词没有关联,单词长度无需存储,所以使用一个变量wordLen来保存每个单词的长度遇到空格时,单词长度清零。 遇到.,时结束读取。

  • 单词之间可能有多个空格,而只在前一个单词结束,遇到第一个空格时输出单词长度,之后的空格不作处理,所以需要一个变量来记录空格是否连续出现isContinueSpace,借鉴题目 链接: 7-23 币值转换.中的zeroContinue 在下一次循环时,更新zeroContinue前,访问zeroContinue,其实就是访问上一位是否为0.实现连续0的判断。 来实现该变量。
    ——isContinueSpace

  • 状态变化0–1 1–0,

0–1 在单词后首次遇到空格 ,输出单词长度后

– 1–0,在遇到. 后,以及在遇到单词时

  • 第一个单词的前面的空格需要注意,否则不加另外的控制会输出0,——在首次遇到空格(isSpaceContinue==0)时,需要再检查单词长度不为0,才能输出
  • 在提交测试时,空句子答案错误,——空句子指只有一个 .的句子,遇到空句子应该什么也不输出。所以,也需要判断wordLen不为0的情况下才输出
  • 每个单词长度值右边空格的控制,借鉴 7-27 念数字 中的 leftHastSpace

空格的控制,实际上是当前遍历到的数字对应的字符串左侧是否有空格——第一个读到的符号左侧没有空格,剩下的都有

定义isFirstWord——

  • ,初始值应该为1,因为读到第一个满足条件的单词,肯定是FirstWord
  • 状态变化 1–0,
  • 1–0,位置:第一个单词输出结束后

4 代码

#include <stdio.h>

int main()
{
  char ch=0;
  int wordLen=0;
  int isSpaceContinue=0,isFirstWord=1; //1--0
  while(scanf("%c",&ch)!=EOF)
  {
    if(ch=='.')
    {
      if(wordLen!=0)
      {
         	if(isFirstWord==0)
         		printf(" ");
          printf("%d",wordLen);         
      }
      if(isSpaceContinue==1)
      	isSpaceContinue=0;
      isFirstWord=0;
      break;
    }  
    else
    {     
      if(ch==' ')
      {
        if(isSpaceContinue==0&&wordLen!=0)
        {
          if(isFirstWord==0)
            printf(" ");
          printf("%d",wordLen);        
          wordLen=0;
          if(isFirstWord==1)
          	isFirstWord=0;
          if(isSpaceContinue==0)	
          	isSpaceContinue=1;
        }       
      }      
      else
      {
        wordLen++;
        if(isSpaceContinue==1)
        	isSpaceContinue=0;
      }
    }
  }
  return 0;
}

5 总结

(1) 连续同字符出现的判断
(2)每空一格输出一个字符,最后一个字符右侧不空格的方法
(3)连续输入字符

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值