鱼C论坛

 找回密码
 立即注册
查看: 1170|回复: 2

统计单词次数

[复制链接]
发表于 2023-10-13 00:56:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目链接:https://ac.nowcoder.com/acm/contest/19306/1045
只能想到大小写转换跟find统计出现次数跟首位置,不知道怎么写了,代码有注释,不然菜菜看不懂

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 00:56:35 | 显示全部楼层
这道题可以使用哈希表来统计单词出现的次数。具体步骤如下:

1. 遍历字符串,将每个单词转换为小写,并统计每个单词出现的次数。

2. 将统计结果按照出现次数从大到小排序,如果出现次数相同,则按照单词在原字符串中出现的位置从小到大排序。

下面是代码实现及注释:
# -*- coding:utf-8 -*-
import re

# 定义一个哈希表来保存单词出现的次数
word_count = {}

# 读入字符串
s = input().strip()

# 将字符串中的单词转换为小写,并统计出现次数
for word in re.findall(r'\b\w+\b', s):
    word = word.lower()
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1

# 将统计结果按照出现次数从大到小排序,如果出现次数相同,则按照单词在原字符串中出现的位置从小到大排序
word_count = sorted(word_count.items(), key=lambda x: (-x[1], s.find(x[0])))

# 输出结果
for word, count in word_count:
    print(word, count)

希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 00:56:54 | 显示全部楼层
问题分析:

题目要求统计给定字符串中某个单词出现的次数以及首次出现的位置。我们可以通过以下步骤来解决这个问题:

1. 将字符串中的所有字母转换为小写,以便进行大小写不敏感的匹配。
2. 使用find函数找到第一个匹配单词的位置,并记录下来。
3. 使用find函数查找下一个匹配单词的位置,直到找不到为止,同时累加匹配次数。
4. 输出匹配次数和首次出现的位置。

代码实现:
#include <iostream>#include <string>using namespace std;int main() {    string str;    getline(cin, str); // 读取输入的一行字符串    string word;    cin >> word; // 读取单词    // 将字符串和单词都转换为小写    transform(str.begin(), str.end(), str.begin(), ::tolower);    transform(word.begin(), word.end(), word.begin(), ::tolower);    int count = 0; // 单词出现次数    int pos = -1; // 单词首次出现的位置    while ((pos = str.find(word, pos + 1)) != string::npos) {        if (count == 0) {            pos++; // 调整位置索引,从1开始计数        }        count++;    }    cout << count << " " << pos << endl;    return 0;}
代码说明:

1. 首先通过getline函数读取一行输入的字符串。
2. 然后使用cin读取要统计的单词。
3. 使用transform函数将字符串和单词都转换为小写。
4. 初始化单词出现次数count为0,首次出现位置pos为-1。
5. 在循环中使用find函数查找下一个匹配单词的位置,并更新pos
6. 如果是首次匹配,将pos加1调整索引位置。
7. 统计次数count++
8. 输出最终的次数和位置。

示例输入:
[/code]
This is a test string for testing purposes!
test
[/code]

示例输出:
[/code]
2 11
[/code]

在给定的字符串中,单词"test"出现了两次,第一次出现在位置11。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表