2011-05-01 6 views
0
char operators[] = "+-*/^("; 
    char* input = new char[100]; 
    char* output = new char[100]; 
    char* operadores = new char[100]; 
    char* pch = input; 
    char* pch2 = input; 
    cout << "Expresion: " <<endl; cin.getline(input,100); 
    cout << input <<endl; 
    pch2 = strpbrk (pch2, operators); 
    pch = strtok (pch, "+-*/^("); 
    while (pch != NULL){ 
     strcat (output, pch); 
     pch = strtok (NULL, "+-*/^("); 
     strcat (operadores, pch2); 
    } 

    cout << "Salida: " << output <<endl; 
    cout << "Operadores: " << operadores <<endl; 
    cout << "Entrada: " << input <<endl; 
    cout << "pch2 = " << pch2 <<endl; 

안녕하세요! 내 문제는 함수 strpbrk가 작동하지 않는다는 것입니다, 그것은 NULL을 반환하지 않습니다, 나는 그것을 증명했습니다. 하지만 스택에 넣으려면 char가 필요하고, cout은 pch2가 지적하는 문자를 표시하지 않습니다.strpbrk가 작동하지 않습니다.

+0

당신이 strpbrk'이 작동하지 않는 '것을 증명 한 이후, 나는 당신이 당신의 컴파일러 공급 업체에 버그보고를 제안한다. 그것은 당신이 발견 한 매우 심각한 결함입니다. –

+1

오, 나는 그것이 컴파일러의 잘못이라고 생각하지 않습니다. 분명히 C/C++은 깨진 언어이며 누구도 사용하지 않아야합니다. ; p –

+2

더 심각하게'strpbrk'는 분명히 여기서 문제가되지 않습니다. 문제는 당신이 어떻게 부르는지에 있습니다. 'strpbrk' 사용을 수정하는 해결책을 제공 할 준비가 되셨습니까? 또한 왜 std :: string 대신 C 문자열을 사용하는지 궁금합니다. –

답변

1

당신 혼란 스러워요. 프로그램이 혼란스럽게 만들었습니다.

동일한 입력 문자열 (input)을 가리키는 pchpch2이 있습니다. strpbrk()으로 전화하여 연산자 중 하나를 찾고 해당 위치를 pch2에 저장하십시오. 그런 다음 에 strtok()을 호출하면 strpbrk()이 방금 발견 된 문자를 찾고 NUL '\0'을 씁니다. 따라서 문자열 끝에 NUL을 가리키는 것은 pch2입니다. 루프 본문에서 pch2이 가리키는 빈 문자열을 대상 연산자 목록에 연결합니다.

개인적으로 입력 문자열을 맹 글링하기 때문에 개인적으로 strtok()을 사용하지 마십시오. strtok()이 NUL 바이트를 쓰므로이 문자열을 사용하려면 문자열의 복제본을 작성해야합니다.

마지막 진단 결과는 입력의 첫 번째 섹션부터 첫 번째 연산자까지만 표시되어야합니다.

표준 라이브러리 함수 또는 '작동하지 않는 컴파일러'에 aspersions를 캐스팅하는 것에주의하십시오. 그것은 tyro의 표시입니다. 시간의 99.9999 %는 사용자 오류이며 시스템 오류가 아닙니다. 당신이 옳을 때 매우 희귀 한 경우에 (우물, 나는 3 번째로 수백만 장의 복권에 당첨되었습니다. 복권을 사지 않아도 될 가능성이 더 큽니다), 당신은 문제가 다르다고 설명합니다. 당신은 그 쟁점을 놀랄만 한 것으로 묘사합니다; 당신은 작동 테스트 케이스를 문서화합니다; 발견 한 엣지 케이스가 어떻게 작동하고 결과가 나오는지 설명하고, 코드 또는 시스템의 버그인지 확실하지 않습니다. 다른 진단으로


, 당신은 그래서 정의되지 않은 동작에 이르게에 합치, 빈 문자열로 operadores를 초기화하지 않습니다.

100 바이트 문자열을 할당 할 필요 정말 없습니다 :

char input[100]; // Cleaner, simpler, more reliable 
관련 문제