Created
December 13, 2021 20:45
-
-
Save wise-introvert/ea64f0d54b47d618635981925a0b68ed to your computer and use it in GitHub Desktop.
Debuggin Answer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
----------------------------------------------BUGS---------------------------------------------- | |
======== BUG 1 ======== | |
Original Line: 13, 16 | |
Issue: Case-sensitive comparision of characters | |
What was done: Used the "tolower" function from the ctype library to convert both the characters being compared to lowercase | |
Original Code: | |
if(str[i] == s[0]) | |
if(str[i + j] == s[j]) | |
Fixed Code: | |
if(tolower(str[i]) == tolower(s[0])) | |
if(tolower(str[i + j]) == tolower(s[j])) | |
======== BUG 2 ======== | |
Original Line: 20 | |
Issue: Wrong condition ( != ) was being used to determine if there was a valid match. | |
What was done: Used the correct condition (==) | |
Original Code: | |
if(matched != len) | |
Fixed Code: | |
if(matched == len) | |
======== BUG 3 ======== | |
Original Line: 22 | |
Issue: The index of the match ( "posn" ) was being assigned the wrong value ( i.e sum of the value of "i" and 1 ) | |
What was done: Changed the value being assigned to the variable | |
Original Code: | |
posn = i + 1; | |
Fixed Code: | |
posn = i; | |
======== BUG 4 ======== | |
Original Line: 35 | |
Issue: The offset value was being decremented instead of being increased by the index of the match | |
What was done: Changed the arithmetic operator to the correct one ( "+" instead of "-" ) | |
Original Code: | |
offset -= lastPosn; | |
Fixed Code: | |
offset += lastPosn; | |
----------------------------------------------FIXED CODE---------------------------------------------- | |
#include <stdio.h> | |
#include <string.h> | |
#include <ctype.h> | |
#define MAX_POSITIONS 20 | |
int findStr(const char str[], | |
const char s[]) { | |
int i, j, found = 0, matched = 0, posn = -1; | |
int len = strlen(s); | |
for (i = 0; str[i] != '\0' && !found; i++) { | |
if (tolower(str[i]) == tolower(s[0])) { | |
matched = 1; | |
for (j = 1; str[i + j] != '\0' && s[j] != '\0'; j++) { | |
if (tolower(str[i + j]) == tolower(s[j])) { | |
matched++; | |
} | |
} | |
if (matched == len) { | |
found = 1; | |
posn = i; | |
} | |
} | |
} | |
return posn; | |
} | |
int findAll(const char str[], | |
const char s[], int positions[]) { | |
int numFound = 0, lastPosn = 0, offset = 0; | |
do { | |
offset += lastPosn; | |
lastPosn = findStr( & str[offset], s); | |
if (lastPosn >= 0) { | |
positions[numFound++] = offset + lastPosn; | |
offset += strlen(s); | |
} | |
} while (lastPosn >= 0 && offset < strlen(str)); | |
return numFound; | |
} | |
int main(void) { | |
char string1[] = { | |
"The cat in the hat ate the mouse in the shoe" | |
}; | |
char lookFor[] = { | |
"the" | |
}; | |
int foundIn[MAX_POSITIONS] = { | |
0 | |
}; | |
int numberFound = 0, i; | |
numberFound = findAll(string1, lookFor, foundIn); | |
printf("%s found in positions: ", lookFor); | |
for (i = 0; i < numberFound; i++) { | |
printf("%d%s", foundIn[i + 1], (i == (numberFound - 1) ? "\n" : ", ")); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment