7-26 单词长度 (15 分)

本文介绍了一个简单的程序设计问题,即如何读取一行文本并计算其中每个单词的长度,即使文本中包含特殊符号和连续空格。通过使用C++编程语言,文章提供了一种实现方法,详细解释了代码逻辑和流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

输入格式:

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

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

输出格式:

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

输入样例:

It's great to see you here.

输出样例:

4 5 2 3 3 4

分析:大部分都在注释里了。参考了网上的方法,最简洁的是一位大神用stringstream ss(str);ss>>buf;buf.length();

但是个人觉得那个方法太牛啤了,还是用个土办法叭...

#include <iostream> 
#include <cstdio> 
#include <fstream> 
#include <algorithm> 
#include <cmath> 
#include <deque> 
#include <vector> 
#include <queue> 
#include <string> 
#include <cstring> 
#include <map> 
#include <stack> 
#include <set> 
using namespace std;

//#include<bits/stdc++.h>


int main(){
    int count_c=0,i=0,flag=0;
    string s;
	getline(cin,s);    //getline(cin,xx)可以忽略空格读入串

    int n=s.length();
    s[n-1]=' ';       //感觉替换成空格,心里舒服很多,不然老是纠结'.'作为结尾符的情况

	while(n){  //想了很多方法,也参考了网上,还是用n,也就是总串的字符总数来控制循环比较好
		if(s[i]==' '){   //把问题想简单点,就是两种情况:是空格或者不是空格
            n--;
            if(count_c && flag==0){   //如果读入的是空格,那就检查一下还有没有要输出的串字符数(因为如果输出,count_c会立刻为0),也就是检查一下这个空格是不是在一个子串的最后一个字符后
                cout<<count_c;        //检查flag是专门为了第一项子串字符数的格式所设置的,后面flag++就是为了告诉程序,第一项已经输出了,不要再来看这个小if了
                flag++;
            }else if(count_c){     //如果不是第一项输出,要在前面先输出空格哦
                cout<<' '<<count_c;
                flag++;
            }
            count_c=0;   //空格读入后的‘输出检查’完毕了,记得把count_c归零
            
        }else if(s[i]!=' '){   //如果读入的字符不是空格,那么很简单,对count_c累加
            count_c++;
            n--;
        }
        i++;                          //千万别忘了这个i++鸭
	}	
    if(count_c){   //这种情况是专门为了把子串字符数‘吐干净’设置的,因为很可能最后一个子串字符数一直‘含着’就遇到了n归零的情况,所以要再问一次自己count_c是否为0?
        cout<<' '<<count_c;
    }
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值