在此代码中如何获得子字符串计数

How in this code getting the count of substring?

本文关键字:字符串 何获得 代码      更新时间:2023-10-16

i正在研究C 代码,该代码计算出大小2的连续substr,链接是代码

,但我对这条线有所怀疑,

for (int i=0; i<str.size()-1; i++) 
        dPairs[make_pair(str[i], str[i+1])]++;

这里的dpairs是一张地图,如下,

map<pair<char,char>, int> dPairs;

" dpair [make_pair(str [i],str [i 1])] 的目的是什么。

dPairs[make_pair(str[i], str[i+1])]++;

对于MAP dPairs中的密钥pair(str[i],str[i+1]),该语句将值递增为1。

例如,如果字符串为 aabaa,则因为它循环,dpairs [pair&lt;'a','a'>]将增加两次,从而总计aa作为2。

++在那里增加了子字符串的计数。map保留了[]访问的唯一键,因此,如果不存在键,则将其添加,如果它确实存在,则它已检索。

因此,假设我们的字符串str"aaa"。首先,我们将a, a添加到地图中,++将其值设置为1(因为它将默认初始化为0)。然后,当我们添加下一个值时,首先检索了上一个a, a,并带有1的值,其值将增加到2。

#include <iostream>
#include <string>
#include <map>
int main()
{
    std::string str { "aaab" };
    std::map<std::pair<char, char>, size_t> pairs;
    for (size_t i = 0; i < str.size() - 1; i++)
    {
        pairs[std::make_pair(str[i], str[i+1])]++;
    }
    for (auto pair : pairs)
    {
        std::cout << pair.first.first << ", " << pair.first.second << ": " << pair.second << "n";
    }
}

str有4个字符,因此循环的3个迭代:

a, a = 1
a, a = 2
a, b = 1