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:
CPP
// 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; } |
Java
// Java program for the above approach import java.util.Arrays; public class Main { static final int max = 4 ; static int [] count = new int [max]; static String str, sub; public static void main(String[] args) { int sum = 0 ; final int [] x = new int [max]; for ( int a = 0 ; a < max; a++) x[a] = a; str = "prrrogramisprrrogramming" ; sub = "rr" ; System.out.println( "Enter the main string: " + str); System.out.println( "Enter the sequence to search: " + sub); Thread[] tid = new Thread[max]; for ( int i = 0 ; i < max; i++) { final int value = i; tid[i] = new Thread(() -> str_seq_count(x[value])); tid[i].start(); } for ( int i = 0 ; i < max; i++) { try { tid[i].join(); } catch (InterruptedException e) { e.printStackTrace(); } } for ( int i = 0 ; i < max; i++) sum = sum + count[i]; System.out.println( "Frequency of substring: " + sum); } static void str_seq_count( int value) { 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.charAt(j) == str.charAt(k)) k++; else { flag = 1 ; break ; } } if (flag == 0 ) count[value] += 1 ; } } } // This code is contributed by adityashatmfh |
Python3
# Python program for the above approach import threading count = [ 0 ] * 4 str = "prrrogramisprrrogramming" sub = "rr" def str_seq_count(value): global count l1 = len ( str ) l2 = len (sub) for i in range (value, l1, 4 ): flag = 0 k = i for j in range (l2): if sub[j] = = str [k]: k + = 1 else : flag = 1 break if flag = = 0 : count[value] + = 1 if __name__ = = '__main__' : total_count = 0 x = [i for i in range ( 4 )] print ( "Enter the main string: " , str ) print ( "Enter the sequence to search: " , sub) threads = [] for i in range ( 4 ): t = threading.Thread(target = str_seq_count, args = (x[i],)) threads.append(t) t.start() for t in threads: t.join() total_count = sum (count) print ( "Frequency of substring: " , total_count) # This code is contributed by codebraxnzt |
C#
// C# program for the above approach using System; using System.Threading; public class MainClass { static readonly int max = 4; static int [] count = new int [max]; static string str, sub; public static void Main( string [] args) { int sum = 0; int [] x = new int [max]; for ( int a = 0; a < max; a++) x[a] = a; str = "prrrogramisprrrogramming" ; sub = "rr" ; Console.WriteLine( "Enter the main string: " + str); Console.WriteLine( "Enter the sequence to search: " + sub); Thread[] tid = new Thread[max]; for ( int i = 0; i < max; i++) { int value = i; tid[i] = new Thread(() => str_seq_count(x[value])); tid[i].Start(); } for ( int i = 0; i < max; i++) { try { tid[i].Join(); } catch (ThreadInterruptedException e) { Console.WriteLine(e.StackTrace); } } for ( int i = 0; i < max; i++) sum = sum + count[i]; Console.WriteLine( "Frequency of substring: " + sum); } static void str_seq_count( int value) { 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; } } } // This code is contributed by Prince Kumar |
Javascript
// JavaScript program to find the frequency // of occurrences of a substring // in the given string using pthread let count = [0, 0, 0, 0]; let str = "prrrogramisprrrogramming" ; let sub = "rr" ; function strSeqCount(value) { let l1 = str.length; let l2 = sub.length; for (let i = value; i < l1; i += 4) { let flag = 0; let k = i; for (let j = 0; j < l2; j++) { if (sub[j] === str[k]) { k++; } else { flag = 1; break ; } } if (flag === 0) { count[value]++; } } } function runThreads() { let x = [0, 1, 2, 3]; console.log( "Enter the main string: " , str); console.log( "Enter the sequence to search: " , sub); let threadIndex = 0; function runNextThread() { if (threadIndex < x.length) { strSeqCount(x[threadIndex]); threadIndex++; setTimeout(runNextThread, 0); // Non-blocking I/O using setTimeout } else { finishExecution(); } } runNextThread(); } function finishExecution() { let total_count = count.reduce((sum, value) => sum + value, 0); console.log( "Frequency of substring: " , total_count); } runThreads(); // This code is contributed by Samim Hossain Mondal |
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
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!