fork(1) download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. // Returns position of first pattern match or -1 if not found
  5. // Example: buffer="abcabc", pattern="cab" should return 2
  6. int findPattern(char* buffer, int bufLen, char* pattern, int patLen)
  7. {
  8.  
  9. if(buffer==nullptr || pattern==nullptr || bufLen <= 0 || patLen <=0 || patLen > bufLen)
  10. return -1;
  11.  
  12.  
  13. int start;
  14. int end;
  15. for( int i = 0; i < bufLen;i++)
  16. {
  17. //simple 2 loops
  18. start = i;
  19. int patternStart = 0;
  20. while(start < bufLen && buffer[start]==pattern[patternStart])
  21. {
  22. start++;
  23. patternStart++;
  24. if(patternStart==patLen)
  25. return i;
  26.  
  27.  
  28. }
  29.  
  30. }
  31.  
  32. return -1;
  33.  
  34.  
  35. }
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. int main() {
  43. // Test Case 1: Basic match
  44. char buffer1[] = "abcabc";
  45. char pattern1[] = "cab";
  46. printf("Test 1: Expected: 2, Got: %d\n",
  47. findPattern(buffer1, strlen(buffer1), pattern1, strlen(pattern1)));
  48.  
  49. // Test Case 2: Pattern at start
  50. char buffer2[] = "hello world";
  51. char pattern2[] = "hell";
  52. printf("Test 2: Expected: 0, Got: %d\n",
  53. findPattern(buffer2, strlen(buffer2), pattern2, strlen(pattern2)));
  54.  
  55. // Test Case 3: Pattern at end
  56. char buffer3[] = "hello world";
  57. char pattern3[] = "orld";
  58. printf("Test 3: Expected: 7, Got: %d\n",
  59. findPattern(buffer3, strlen(buffer3), pattern3, strlen(pattern3)));
  60.  
  61. // Test Case 4: Pattern not found
  62. char buffer4[] = "hello world";
  63. char pattern4[] = "xyz";
  64. printf("Test 4: Expected: -1, Got: %d\n",
  65. findPattern(buffer4, strlen(buffer4), pattern4, strlen(pattern4)));
  66.  
  67. // Test Case 5: Empty buffer
  68. char buffer5[] = "";
  69. char pattern5[] = "abc";
  70. printf("Test 5: Expected: -1, Got: %d\n",
  71. findPattern(buffer5, strlen(buffer5), pattern5, strlen(pattern5)));
  72.  
  73. // Test Case 6: Empty pattern
  74. char buffer6[] = "hello";
  75. char pattern6[] = "";
  76. printf("Test 6: Expected: -1, Got: %d\n",
  77. findPattern(buffer6, strlen(buffer6), pattern6, strlen(pattern6)));
  78.  
  79. // Test Case 7: Pattern longer than buffer
  80. char buffer7[] = "abc";
  81. char pattern7[] = "abcd";
  82. printf("Test 7: Expected: -1, Got: %d\n",
  83. findPattern(buffer7, strlen(buffer7), pattern7, strlen(pattern7)));
  84.  
  85. // Test Case 8: Null inputs
  86. printf("Test 8: Expected: -1, Got: %d\n",
  87. findPattern(NULL, 5, pattern1, strlen(pattern1)));
  88.  
  89. // Test Case 9: Repeated pattern
  90. char buffer9[] = "aaaaa";
  91. char pattern9[] = "aa";
  92. printf("Test 9: Expected: 0, Got: %d\n",
  93. findPattern(buffer9, strlen(buffer9), pattern9, strlen(pattern9)));
  94.  
  95. // Test Case 10: Single character
  96. char buffer10[] = "abcabc";
  97. char pattern10[] = "b";
  98. printf("Test 10: Expected: 1, Got: %d\n",
  99. findPattern(buffer10, strlen(buffer10), pattern10, strlen(pattern10)));
  100.  
  101. return 0;
  102. }
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
Test 1: Expected: 2, Got: 2
Test 2: Expected: 0, Got: 0
Test 3: Expected: 7, Got: 7
Test 4: Expected: -1, Got: -1
Test 5: Expected: -1, Got: -1
Test 6: Expected: -1, Got: -1
Test 7: Expected: -1, Got: -1
Test 8: Expected: -1, Got: -1
Test 9: Expected: 0, Got: 0
Test 10: Expected: 1, Got: 1