2011-03-01 4 views
1

-> ---> a | b ---> 1 | 1파서 도움말 프로그램이 작동하지 않습니다.

a 또는 b와 1을 나중에 시작하는 것으로 가정합니다. 얼마나 많은 1이 a 나 b 뒤에 있는지는 중요하지 않습니다. 예를 들어 : A1, B1, b111111, A111 내가 입력 모든 유효하지만 유효한 있어야하는데 : A1, B1, b111111,

/* 
<S> --> <A><B> 
<A> ---> a | b 
<B> ---> 1 | 1 <B> 

It suppose to be vaild for example: a1, b1, b111111, a111 
*/ 
#include <iostream> 
#include<stdlib.h> // for the exit(1) function 
using namespace std; 

char text[100]; 
char ToBeChecked; 

char lexical(); //identify the characters 
void SProd(); 
void AProd(); 
void BProd(); 


int main() 
{ 
    cout<<"Enter a string(max. 100 characters"<<endl; 
    cin>>text; 

    ToBeChecked = lexical(); //identify the character; find the first letter and give it to ToBeChecked 
    SProd(); 

    if(ToBeChecked = '\0') 
     cout<<"Valid"<<endl; 
     else 
     cout<<"Invalid"<<endl; 
    cin.get(); 
    return 0; 
} 

char lexical() 
{ 
    static int index = -1; //a memory box named index with a value of -1; is static so it won't change. 
          //is -1 because -1 to 1 is 0; everytime move on to next one 
    index++; //update index 
    return text[index]; //return the value of index 
} 

//<S> --> <A> <B> 
void SProd() 
{ 
    AProd(); 
    BProd(); 
} 

//<A> ---> a | b 
void AProd() 
{ 
    if(ToBeChecked == 'a'){ 
     ToBeChecked = lexical(); 
    } 
    else 
    { 
     if(ToBeChecked == 'b'){ 
      ToBeChecked = lexical(); 
     } 
    } 
} 

//<B> ---> 1 | 1 <B> 
void BProd() 
{ 
    if(ToBeChecked != '1') 
    { 
     cout<<"Invalid"<<endl; 
     exit(1); 
    } 
    else 
     while (ToBeChecked == '1') 
      ToBeChecked = lexical(); 
} 
+3

게시물을 다시 포맷해야 실제로 질문 할 수 있습니다. –

+0

내가 입력 한 모든 내용은 유효하지 않지만 유효합니다. a1, b1, b111111, a111 – Mugetsu

+0

이것은 진술입니다. 질문이 뭐야? – razlebe

답변

5

봐 조심스럽게 A111이 줄

if(ToBeChecked = '\0') 
에서

그게 무슨 일을합니까? 왜 그게 당신이 원하는 것이 아니겠습니까?

+0

감사합니다 !!! 나는 그것이 제대로 작동하지 않는 이유가 혼란스러워서 모든 일을 올바르게 처리했다는 것을 알았습니다. 내가 잘못했다고 생각한 적이 한 번도 없다. if (ToBeChecked == '\ 0') – Mugetsu

관련 문제