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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了