DreamJudge-1394-统计单词

1.题目描述

Time Limit: 1000 ms
Memory Limit: 256 mb

编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。 (凡是以一个或多个空格隔开的部分就为一个单词)

输入输出格式

输入描述:

输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。

输出描述:

可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。

输入输出样例

输入样例#:

hello how are you.

输出样例#:

5 3 3 3

题目来源
华中科技大学

2.题解

2.1 字符串函数

思路

这里的思路就是使用vector数组的可变长度性,先利用isspace() 和 '.'(结束符) 将单词分隔开来
当我们发现一个新的单词时,我们就向vector数组中插入一个新的元素,初始值为1(代表一个新的单词),并不断更新它的长度,直到开始下一个单词
最后遍历这个数组即可

这里巧妙的利用了vector.back()函数,这样就不需要单独记录下标了!

代码

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;

void countWords(string& s) {
    int n = s.length();
    bool inWord = false; // 标记是否在单词中
    vector<int> counts;
    for (int i = 0; i < n; ++i) {
        // 如果当前字符是空白符,说明单词结束
        if (isspace(s[i]) || s[i] == '.') {
            inWord = false;
        } else {
            // 如果当前字符不是空白符,且不在单词中,说明新单词开始
            if (!inWord) {
                inWord = true;
                counts.push_back(1);					
            } else{
				counts.back()++;	
			}
        }
    }
	
	for(int num : counts){
		cout << num << ' ';
	}
}

int main() {
    string input;
    getline(cin, input);
    
    countWords(input);
    return 0;
}

posted @   DawnTraveler  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示