gpt4 book ai didi

C++,计算字符串中重复的单词并显示

转载 作者:太空狗 更新时间:2023-10-29 21:04:12 24 4
gpt4 key购买 nike

我有字符串说“walk talk,can't won't Won't woN'T talk.”我想计算重复的单词并显示。注意:不区分大小写。

我用过定界符

strtok(string, ",.;:\"!? -_\n\t*()@#=+");

并保存在

char *temp[100];

现在如何检查单词的重复?并显示如下

3 won't
2 talk
1 can't
1 walk

它应该从最高重复率到最低重复率显示。如果重复相同则显示字母顺序。

抱歉我的英语不好。

最佳答案

使用 std::string 来保存 strtok() 的结果.然后创建一个 std::map<string, int>保存字符串(键)出现的次数。

您可以使用以下内容填充 map :

std::map<string, int> myMap;
myMap[tokenizedWord]++; //Increase count of word.

然后您可以循环遍历 map 内容并打印出整数值大于 2 的任何地方。

for (std::map<string, int>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter)
{
if (iter->second > 1)
std::cout << "Duplicated word: " << iter->first << " count = " << iter->second;
}

我会让你弄清楚如何按顺序遍历它。您可以将值放在 vector 或其他东西中并使用 std::sort在打印或其他任何你喜欢的东西之前。遗憾的是, map 是关联容器,您无法对它们进行排序,因为这会破坏它们的内部顺序。

std::map 的背景信息

映射是一个关联数组,这意味着每个键都映射到一个特定的值,并且键是唯一的。实际上,您可以创建键不唯一的多重映射,因此这很重要。

基本上,由于键是唯一的,您只需将键用作数组索引即可访问或创建元素。

例如:

//Create a map and insert a couple things into it - prices of meat?
std::map<string, float> myMap;
myMap["Chicken"] = 4.99;
myMap["Turkey"] = 6.99;

//Retrieve the price of something using the key.
std::cout << "Chicken costs " << myMap["Chicken"] << std::end;

您也可以在 map 上执行标准的插入和定位操作,但关联数组语法更简单,何必呢? :)

PS: 为了完整回答您的评论,以防万一,myMap[tokenizedWord]++ 末尾的++ 只是说增加为该键存储的整数值的值1. 你也可以做 myMap[tokenizedWord] = myMap[tokenizedWord] + 1 或者你也可以做 myMap[tokenizedWord] += 1.

关于C++,计算字符串中重复的单词并显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com