2014-09-25 2 views
0

는 좀 Mips에서 조립 개발을 배우기 시작하고 내가 해결하기 위해 열심히 볼 수있는 다음과 같은 질문에 발생했습니다Mips에서 조립 - 문자열

A string which is recieved from the user consists only from Brackets, left and right. 
A legal string is one that for each left bracket has a closing right bracket. 
A bracket can be inside another bracket, as long as it has a closing bracket. 

The following "strings" are legal: 
(), (()), ((())) 

The following "strings" are not legal: 
())), (, ((((() 

An empty string is also legal. 

그것은 나에게 매우 분명하다 좌우 브라켓의 수 평등해야합니다.

자바로해야만하는 경우, 대괄호에 도달 할 때까지 왼쪽 대괄호를 "계산"하고 해당 수가 맞는지 확인하십시오.

그러나 Mips에서 어떻게 사용하는지 모르겠습니다.

편집 : 아래 답변을 참조하십시오.

+0

java로 작성한 다음 각 줄을 하나 이상의 MIPS 명령어로 변환하십시오. – markgz

+0

알고리즘은 동일 할 것입니다. 특히 당신이 문제가있는 것은 무엇입니까? MIPS 어셈블리를 전혀 모르는 경우 주제 또는 서적을 읽어야합니다. – Michael

+1

나는이 용어가 "잘 어울리는 괄호"라고 생각하고 [이 질문과 답변]을 읽을 수 있습니다. (http://stackoverflow.com/questions/2509358/how-to-find-validity-of-a-string- 괄호 - 중괄호 - 중괄호 - 중괄호 -)를 참조하십시오. –

답변

1

나는 여기에있는 사람들로부터 약간의 도움을 받아 바로 대답을 얻었습니다. 중요한 점은 어느 지점에서라도 왼쪽 대괄호보다 더 옳은 점이 있음을 아는 것입니다.

.data 
theArray: .space 64 
str: .asciiz "\n enter a string, consists only of brackets. enter 0 in the end. \n" 
msg1: "\n legal string\n" 
msg2: "\n the string is not legal" 

.text 
    li $t0, 0 #left bracket counter 
    li $t1, 0 #right bracket counter 
    la $s0, theArray #pointer the string 

loop: 
    la $a0, str 
    li $v0, 4 
    syscall 
    li $v0, 12 
    syscall 

    beq $v0, 48, checkLegal 
    beq $v0, 40, leftBracket 
    beq $v0, 41, rightBracket 
    j exit 
leftBracket: 
    addi $t0, $t0, 1 
    j loop 

rightBracket: 
    addi $t1, $t1, 1 
    #if at any point there are more right brackets than left, the string is not legal 
    bgt $t1, $t0, notLegal 
    j loop  

checkLegal: 
    beq $t1, $t0, printLegal 
    j notLegal 
printLegal: 
    la $a0, msg1 
    li $v0, 4 
    syscall 
    j exit 
notLegal: 
    la $a0, msg2 
    li $v0, 4 
    syscall 

exit: 
    li $v0, 10 
    syscall