📜  使用 pthread 的字符串中子字符串的频率

📅  最后修改于: 2022-05-13 01:57:08.572000             🧑  作者: Mango

使用 pthread 的字符串中子字符串的频率

给定一个输入字符串和一个子字符串。使用 pthreads 查找给定字符串中子字符串的出现频率。

例子:

Input: string = "man"
      substring = "dhimanman"
Output: 2

Input: string = "banana"
      substring = "nn"
Output: 0

注意:建议在基于 Linux 的系统中执行该程序。
使用以下代码在 linux 中编译:

g++ -pthread program_name.cpp

程序:

// C++ program to find the frequency
// of occurrences of a substring
// in the given string using pthread
  
#include 
#include 
#include 
#include 
#include 
#include 
#define max 4
using namespace std;
  
int count[max] = { 0 };
string str, sub;
  
void* str_seq_count(void* args)
{
    int value = *(int*)args;
    int i, j, k, l1, l2, flag;
  
    // calculating length of string 1
    l1 = str.length();
  
    // calculating length of substring
    l2 = sub.length();
  
    for (i = 0 + value; i < l1; i = i + max) {
  
        flag = 0;
        k = i;
  
        for (j = 0; j < l2; j++) {
  
            // flag=0;
            if (sub[j] == str[k])
                k++;
            else {
                flag = 1;
                break;
            }
        }
        if (flag == 0)
            count[value] += 1;
    }
}
  
// Driver code
int main()
{
    int sum = 0;
    int x[max];
    for (int a = 0; a < max; a++)
        x[a] = a;
  
    str = "prrrogramisprrrogramming";
    sub = "rr";
  
    cout << "Enter the main string: "
         << str << endl;
    cout << "Enter the sequence to search: "
         << sub << endl;
  
    int i, l1;
  
    pthread_t tid[max];
  
    for (i = 0; i < max; i++) {
        pthread_create(&tid[i], NULL,
                       str_seq_count,
                       (void*)&x[i]);
    }
    for (i = 0; i < max; i++)
        pthread_join(tid[i], NULL);
    for (i = 0; i < max; i++)
        sum = sum + count[i];
    cout << "Frequency of substring: "
         << sum;
  
    return 0;
}

输出:

Enter the main string: prrrogramisprrrogramming
Enter the sequence to search: rr
Frequency of substring: 4

相关文章:字符串中子字符串的频率