Nếu chuỗi đầu vào là "yesnoyesyesnoo" thì nếu tách ra sẽ là "yes no yes yes noo". Chữ "noo" cuối cùng không đúng nên chuỗi trên sẽ không thể tách ra được.
Cho tập hợp các chữ xuất hiện trong chuỗi: "yes", "no", "not", "yeah"
Viết chương trình kiểm tra xem chuỗi đầu vào có khả năng tách ra thành các chữ độc lập hay không.
chuỗi kí tự có độ dài tối đa là 100 kí tự.
Đầu vào: Chuỗi các chữ liền nhau
Đầu ra: 1 nếu có thể tác được, 0 nếu không thể tách được.
Chương trình tham khảo [Chú ý code mới đúng được 80%, cần người tìm lỗi sai trong giải thuật sau]
/**
** Character can cut
** yesnonotyeah --> yes, no, not, yeah
** string 100 character
**/
#include
#include
int main(){
char Text[101];
int test = 1;
while( test!=0 ){
for(int i = 0; i < 101; i++){
Text[i] = NULL;
}
printf("Nhap chuoi test: ");
fflush(stdin);
scanf("%s",&Text);
int check = 1;
int index = 0;
char before = 't';
char current = Text[0];
int final = 0;
int Ans = 0;
int length = 0;
for(int i = 0; i < 101; i++){
if( Text[i] != NULL ){
printf("%c",Text[i]);
length++;
}
}
printf("%d", length);
int caseTest = 0;
while(check != 0){
if( ( (current == 'y') && ( before=='t' || before == 'o' || before == 's' || before == 'h')) ||
( (current == 'n') && ( before=='t' || before == 'o' || before == 's' || before == 'h')) ||
( (current == 'e') && ( before=='y') ) ||
( (current == 's') && ( before=='e') ) ||
( (current == 'o') && ( before=='n') ) ||
( (current == 't') && ( before=='o') ) ||
( (current == 'a') && ( before=='e') ) ||
( (current == 'h') && ( before=='a') ) ){
index++;
if( current == 't' || current == 'o' || current == 's' || current =='h' ){
final = 1;
} else {
final = 0;
}
before = current;
current = Text[index];
if(index == length && final == 1){
Ans = 1;
break;
}
} else {
Ans = 0;
break;
}
}
printf("#%d : %d\n", caseTest, Ans);
caseTest++;
}
getch();
return 0;
}

No comments:
Post a Comment