c - Need help understanding what strncmp function in for loop is doing -
i dont understand happening in code below in strncmp function. why (all+j*100)+i
?
/* search jth string in char all[][100] *pat*/ int patternsearch( int j, char *all, char *pat ) { int i; ( i=0; < strlen(all+j*100); i++ ) { if ( strncmp(pat, ((all+j*100)+i), strlen(pat)) == 0 ) { return(i); // *pat found @ ith byte of all[j] } } return(-1); // *pat not found in all[j] }
it great if please explain me in detail going on in loop.
the comment in first line explains all. array all
divided in chunks of 100 characters, , argument j
tells chunk start looking pattern. strncmp
applied positions starting @ beginning of j
th chunk, until end of array. return offset of character pattern found relative beginning of j
th chunk.
what (all+j*100)+i
do?
the j*100
gets index of first element of j
th chunk of array. is, if j
2, obtains 200 index of first element of 2nd chunk (the chunk @ start zeroth chunk).
all+j*100
same &all[j*100]
, getting pointer element (or beginning of chunk) talked about, in case &all[200]
.
finally +i
incrementing pointer i
, , i
iterator of loop @ first pass input strncmp()
&all[200]
, , &all[201]
, , &all[202]
, on until pattern found or end of array reached.
the choice of literal 100, , using divide array chunks, seems choice made programmer of function. not needed, call function j=0
, search pattern done without using 100 anything. programmer knew in arrays, patterns found few hundred characters array, gave caller chance start looking pattern j
-hundred characters array search done faster.
example - imagine literal 5 instead of 100 simplicity, with:
arr = "abcdefghijklm"; pat = "gh";
if argument passed j=0
, first strncmp
in loop called &arr[0]
looking @ 'a'
character, second &arr[1]
looking @ 'b'
, on until pattern found. it'll found on 'g'
(&arr[6]
) return 6
.
if argument passed j=1
, first strncmp
in loop called &arr[5]
looking @ 'f'
character, second &arr[6]
looking @ 'b'
pattern found , 1
returned.
Comments
Post a Comment