Frequency of a substring in a string using pthread
Given an input string and a substring. Find the frequency of occurrences of a substring in the given string using pthreads.
Examples:
Input: string = "man" substring = "dhimanman" Output: 2 Input: string = "banana" substring = "nn" Output: 0
Note: It is advised to execute the program in Linux based system.
Compile in linux using following code:
g++ -pthread program_name.cpp
Program:
// C++ program to find the frequency // of occurrences of a substring // in the given string using pthread #include <iostream> #include <pthread.h> #include <stdlib.h> #include <sys/types.h> #include <time.h> #include <unistd.h> #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; } |
Output:
Enter the main string: prrrogramisprrrogramming Enter the sequence to search: rr Frequency of substring: 4
Related article: Frequency of a substring in a string