Question: Using C, please help with the following, (it should be added to the else block at the end) Please explain the code, I've looked at
Using C, please help with the following, (it should be added to the else block at the end) Please explain the code, I've looked at how to reverse strings but not entire lines, basically I want it to do the following ./find -r apples I like fruit John Likes apples There's too many apples The output would be: There's too many apples John Likes apples -r: prints out the lines in the reverse order (the line that appears last in stdin will appear first in stdout). Look at how if(!sort && !reverse), and else if(sort) is structured to see how it should be formatted and with what info like if(result && !except || !result && except) printf("%s%s ", number? line_no:"", lineptr[j]); , etc... Code is as follows: #include #include #include void swap(char* arr[], int i, int j){ void* temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } char *strstr_fully_matched(char *haystack, char *needle) {//needle = "apple" char *rv; char padded_needle[strlen(needle) + 3]; padded_needle[0] = ' '; strcpy(padded_needle + 1, needle); padded_needle[strlen(needle) + 1] = ' '; padded_needle[strlen(needle) + 2] = '\0';//" apple " if (!strncmp(haystack, padded_needle + 1, strlen(needle) + 1)) { return haystack; // needle is at the beginning } if ((rv = strstr(haystack, padded_needle)) != NULL) { return rv + 1; // needle is at the middle. } padded_needle[strlen(needle) + 1] = '\0'; if ((rv = strstr(haystack, padded_needle)) != NULL && rv[strlen(padded_needle)] == '\0') { return rv + 1; // needle is at the end. } return NULL; } void book_s_qsort(char*v[], int left, int right){ int i, last; if(left >= right) return; swap(v, left, left + (right-left)/2); last = left; for(i = left+1; i <= right;i++) if(strcmp(v[i],v[left]) < 0){ swap(v, ++last, i); } swap(v, left, last); book_s_qsort(v, left, last-1); book_s_qsort(v, last+1, right); } void error(char* message){ printf("%s ", message); } char* lineptr[1000]; char* strstr_updated(char* haystack, char* needle, int match){ if(match) return strstr_fully_matched(haystack, needle); else return strstr(haystack, needle); } int main(int argc, char* argv[]){ int except = 0, number = 0, sort = 0, reverse = 0, match = 0; if(argc < 2){ error("fatal error: too few arguments"); return 1; } int i = 1; while(argc != 2){ char* current_arg = argv[i++]; if(current_arg[0] != '-'){ error("fatal error: illegal CLAs"); return 2; } while(*++current_arg){ switch(*current_arg){ case 'x': case 'X': except = 1; break; case 'n': case 'N': number = 1; break; case 's': case 'S': sort = 1; break; case 'r': case 'R': reverse = 1; break; case 'm': case 'M': match = 1; break; default: error("fatal error: illegal option entered"); return 3; } }argc--; } char* pattern = argv[i]; printf("pattern is %s, n = %d, s = %d, r = %d, m = %d, x = %d ", pattern, number, sort, reverse, match, except); if(reverse && sort){ error("fatal error: can't use -r and -s in the same execution"); return 4; } //input stream read operation... char line[1000]; i = 0; while (fgets(line, 1000, stdin)) { if(line[strlen(line) - 1] == ' ') line[strlen(line) - 1] = '\0';//drop the new line lineptr[i++] = strdup(line);//malloc to allocate space in heap and strcpy to copy line to heap }//i represents the no of sentences input by the user if(!sort && !reverse){ for(int j = 0; j < i; j++){ char* result = strstr_updated(lineptr[j], pattern, match); char* line_no = (char*) malloc(10); sprintf(line_no, "%d. ", (j+1)); //if pattern is found and -x doesn't exist //or if pattern is missing and -x exists //then print the line in the output if(result && !except || !result && except) printf("%s%s ", number? line_no:"", lineptr[j]); } }else if(sort){ book_s_qsort(lineptr, 0, i - 1); for(int j = 0; j < i; j++){ char* result = strstr_updated(lineptr[j], pattern, match); char* line_no = (char*) malloc(10); sprintf(line_no, "%d. ", (j+1)); if(result && !except || !result && except) printf("%s%s ", number? line_no:"", lineptr[j]); } }else{//reversed //complete this part as well... } return 0;//no error occured! }
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
