+ 1

Why my security problem code do not pass case4

#include <stdio.h> #include <string.h> int main() { char str[100], ch1,ch2; int i, len, flag=1; fgets(str,100,stdin); len=strlen(str); for(i=0;i<len;i++) { if((str[i]=='G')||(str[i]=='

#x27;)||(str[i]=='T')) { ch1=str[i]; ch2=str[i+1]; if(((ch1=='
#x27;)&&(ch2=='T'))||((ch1=='T')&&(ch2=='
#x27;))) flag =0; } } if(flag==0) printf("ALARM"); if(flag==1) printf("quiet"); return 0; }

20th Jan 2020, 11:45 AM
Somvir Dhaka
Somvir Dhaka - avatar
3 ответов
+ 5
Please carefully read the challenge again. $ and T don't have to be direct neighbours.
20th Jan 2020, 12:06 PM
Oma Falk
Oma Falk - avatar
+ 2
with ch2 = str[i +1]; you are assuming that there is no 'x' between the 'G' 'T' or '
#x27; and your for loop doesn't stop when if conditions are met, it just keep looping to the end. your approach would work if you eliminate all 'x' that way you are sure '
#x27; is directly next to 'T' or 'G'. so you can remove all 'x' and locate '
#x27; index then check if there is a 'T' in index + 1 or index - 1.
20th Jan 2020, 12:25 PM
Bahhaⵣ
Bahhaⵣ - avatar
0
Ssss something like, just bellow len =strlen(strl);: int j = 0; char nstr[100]; //remove 'x' an copy result to nstr for(i = 0 ; i < len;i++){ if (str[i] != 'x'){ nstr[j] = str[i]; j++; } } //find index of '
#x27; and save it in s_index int s_index = 0; for(int i =0; i < strlen(nstr);i++){ if(nstr[i] == '
#x27;){ s_index = i; break; } } //check left and right of '
#x27; if (nstr[s_index -1] == 'T' || nstr[s_index + 1] == 'T'){ printf("ALARM"); } else{ printf("quiet"); } return 0 ;
20th Jan 2020, 1:09 PM
Bahhaⵣ
Bahhaⵣ - avatar