Advertisement
Guest User

Untitled

a guest
May 6th, 2016
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <fstream>
  4. #include<stdio.h>
  5. #include<string.h>
  6. #define NO_OF_CHARS 256
  7. using namespace std;
  8.  
  9. void naive_search(string pat, string txt)
  10. {
  11. int M = pat.length();
  12. int N = txt.length();
  13.  
  14. /* A loop to slide pat[] one by one */
  15. for (int i = 0; i <= N - M; i++)
  16. {
  17. int j;
  18.  
  19. /* For current index i, check for pattern match */
  20. for (j = 0; j < M; j++)
  21. {
  22. if (txt[i + j] != pat[j])
  23. break;
  24. }
  25. if (j == M) // if pat[0...M-1] = txt[i, i+1, ...i+M-1]
  26. {
  27. printf("Pattern found at index %d n", i);
  28. }
  29. }
  30. }
  31. int goNextState(string pattern, int num_total_state, int state, int given_character) {
  32.  
  33. // If our character match with the pattern
  34.  
  35. if (state < num_total_state && given_character == pattern[state])
  36. return state + 1;
  37.  
  38. int nextstate, index;
  39.  
  40. //If dont match, search the maximum legth of matched pattern
  41. // For example pattern is = aabb and our index is aabc , start to match first character of pattern and last character of given index increasingly and decreasingly..
  42.  
  43. for (nextstate = state; nextstate > 0; nextstate--)
  44. {
  45. if (pattern[nextstate - 1] == given_character) // start to find longest matched substring
  46. {
  47. for (index = 0; index < nextstate - 1; index++) {
  48. if (pattern[index] != pattern[state - nextstate + 1 + index])
  49. break;
  50. }
  51. if (index == nextstate - 1)
  52. return nextstate;
  53. }
  54. }
  55. return 0;
  56. }
  57.  
  58. void Transition_Table(string pattern, int lengt_of_pattern, int Table_Array[][NO_OF_CHARS])
  59.  
  60. {
  61.  
  62. int given_character;
  63. int state;
  64.  
  65. for (state = 0; state <= lengt_of_pattern; state++)
  66. for (given_character = 0; given_character<NO_OF_CHARS; ++given_character)
  67.  
  68. Table_Array[state][given_character] = goNextState(pattern, lengt_of_pattern, state, given_character);
  69. }
  70.  
  71. void Automata_Compute(string pattern, string given_text) {
  72. int numberOfLine = 0;
  73.  
  74. int count = 0;
  75. int A = pattern.length();
  76. int B = given_text.length();
  77.  
  78. int Table_Array[50][NO_OF_CHARS];
  79.  
  80. Transition_Table(pattern, A, Table_Array);
  81.  
  82. int i, state = 0;
  83. for (i = 0; i<B; i++) {
  84.  
  85. // get input ...
  86. istringstream stream(given_text);
  87. string line;
  88. for (int a = 0; getline(stream, line); ++a) {
  89.  
  90. state = Table_Array[state][given_text[i]];
  91.  
  92. if (state == A) {
  93. count++;
  94. printf("n pattern found at line %d , %d", a, count);
  95. }
  96. }
  97. }
  98. }
  99.  
  100. // Driver program to test above function
  101. int main()
  102. {
  103.  
  104. /*ifstream file("stringExample");
  105. string content((istreambuf_iterator<char>(file)),
  106. (istreambuf_iterator<char>()));*/
  107.  
  108. ifstream ifile("stringExample.txt"); // open
  109. string str(istreambuf_iterator<char>(ifile), {});
  110.  
  111. string pat = ("AABA");
  112. string text = (str);
  113.  
  114. naive_search(pat, text);
  115.  
  116. Automata_Compute(pat, text);
  117.  
  118. return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement