C++ 在数组中统计给定字符串出现的次数(在范围[l, r]内)
在本教程中,我们使用C ++实现示例,以找出输入字符串在范围[l, r]的数组中出现的次数。该任务解决方案中的字符串数组仅使用小写字母。不同的字符串存储在字符串数组中,并进行遍历以检查特定字符串是否存在。这是针对给定范围L和R的。L和R是用于在输入字符串数组中搜索该范围内的字符串的起始和结束索引值。找到位于输入数组的L和R之间的字符串。
演示1
str_arr[] = {“abc”, “def”, “ghi”}
str = “abc”
L = 1, R = 2
输出
0
在上面的演示中,L和R的值分别为1和2。我们检查字符串“abc”是否存在于str_arr的范围内,范围为str_arr[1, 2]。从索引值为1开始迭代str_arr[],并在索引值为2时搜索字符串“abc”。我们发现“abc”在[1, 2]之间不存在,因为它存在于索引值0。因此,输出为0。 演示2
str_arr = {“abc”, “ghi”, “cde”}
str = “cde”
L = 1, R = 3
输出
1
在上面的演示中,我们检查字符串“cde”是否在str_arr的str_arr [ 1,3 ]范围内。迭代str_arr以检查给定范围的所有元素。“cde”存在于str_arr [ 1,2 ]中。因此,输出为1。
C ++库函数在示例中使用
语法
sizeof(): 这是C ++中的关键字,用于确定运算符、数据类型和变量的大小。它在编译时估计大小。
sizeof(data type);
unordered_map(): 它是C++标准库中的一个容器类,在头文件中定义。它以无序且以键-值对的形式存储元素。每个键在键-值对中是唯一的,与其相关联的是值。
unordered_map<data_type> nameofunordered_map;
unordered_map 的 find() 方法: 这是 unordered_map 类的一个成员函数。它用于在 unordered_map 的键值对中搜索特定的键。
unordered_map.find(key);
unordered_map:end() : 它是unordered_map类的一个成员函数,定义在
unordered_map.end(value);
vector(): 它是C++中的一个大小无限的数组,为其元素提供连续的内存位置。它在
vector <data_type>vector_name;
upper_bound():上限函数 它指的是存储元素中大于指定值的下一个位置或迭代器的位置。
upper_bound(value);
begin() : 它返回存储在向量数组中的元素的第一个位置。它是C++库中的预定义函数。此函数不接受任何参数。
vector_name.begin();
Make_pair(): 它在标准C++模板库中定义。它用于使用其第一个和第二个参数创建一对值。参数值可以是不同的数据类型。
make_pair(value1, value2);
步骤
- 初始化一个字符串数组来存储不同的字符串值。
-
定义一个要在字符串数组中检查的字符串 str。
-
定义 L 和 R 的值。
-
迭代每个字符串数组元素,与 str 进行比较。
-
使用一个计数器变量,并将其初始化为 0。
-
如果 str 与数组元素匹配,则增加其值。
-
返回计数器变量并打印它。
示例1
我们使用 C++ 编程概念和其库函数来实现其中一个示例。我们使用简单的方法,定义一个字符串数组 “str_arr{}”。对于给定的字符串 str,比较 str_arr{} 的每个元素。使用一个计数器变量来统计 str_arr{} 中给定范围内输入字符串的出现次数。
#include <bits/stdc++.h>
using namespace std;
// User-defined function to count the number of occurrence of a given string
int totalAppearence(string str_arr[], int a, string s, int L, int R){
//counter variable
int cnt=0;
//Iterating for the given values of L and R
for (int x = L-1; x < R; x++){
//condition for matches string
if(str_arr[x]==s)cnt++;
}
return cnt;
}
// Program Controller
int main(){
string str_arr[] = { "abc", "def", "abc" };
int a = sizeof(str_arr) / sizeof(string);
int L = 1;
int R = 2;
string s = "abc";
cout << "Number of times input string appear in the array is:" << totalAppearence(str_arr, a, s, L, R);
return 0;
}
输出
Number of times input string appear in the array is: 1
示例2
为了实现以上演示之一,我们使用了unordered_map来存储字符串数组的值。unordered_map的索引用于将输入字符串与数组元素在定义范围内进行比较。
unordered_map通过其映射值和键值对来快速搜索。
#include <bits/stdc++.h>
using namespace std;
// User-defined function to count the occurrence of input string
int totalAppearence(string str_arr[], int a, string s, int L, int R)
{
// initialized unordered_map
unordered_map<string, vector<int> > N;
for (int x = 0; x < a; x++)
{
string t = str_arr[x];
auto i = N.find(t);
if (i == N.end())
{
vector<int> B;
B.push_back(x + 1);
N.insert(make_pair(t, B));
}
else
{
i->second.push_back(x + 1);
}
}
auto i = N.find(s);
// When string is not in array
if (i == N.end())
return 0;
//when string is found in array
vector<int> B = i->second;
int m = upper_bound(B.begin(), B.end(), R) - B.begin();
int n = upper_bound(B.begin(), B.end(), L - 1) - B.begin();
return (m - n);
}
// program controller
int main()
{
string str_arr[] = { "abc", "dfe", "cba" };
int a = sizeof(str_arr) / sizeof(string);
int L = 1;
int R = 1;
string s = "gef";
cout << "Number of times input string appears in the array is : " << totalAppearence(str_arr, a, s, L, R);
return 0;
}
输出
Number of times input string appears in the array is : 0
结论
我们到达了这个教程的尾声,以找到一个输入字符串在字符串数组Range L和R中出现的次数。我们演示了如何清晰地表述问题陈述以便于简单实施。我们使用不同的C++库函数实现了两个示例。在第一个示例中,我们使用一个字符串数组,并遍历定义的范围元素,检查是否与输入字符串匹配。在第二种方法中,使用unordered_map来存储索引。要查找输入字符串的出现次数,可以搜索unordered_map索引并打印结果。