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:
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; } |
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 |
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 |
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 |
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
Please Login to comment...