使用mips替换字符串的特定字符 [英] Replace specific character of string using mips

查看:669
本文介绍了使用mips替换字符串的特定字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用mips替换字符串的特定字符.该程序就像用户需要输入限制为40个字符的字符串,而程序需要询问用户是否要替换字符串中的任何字符.在我的代码中,我只能打印一个字符,这是我的代码:

I was trying to replace specific character of string using mips. The program is like the user needs to enter the string which is limited to 40 characters and the program needs to ask the user if they want to replace any character of the string or not. In my code I was able to print only one character, here is my code:

.data
prompt0: .asciiz " Please Enter any String :"
prompt:.asciiz "\n Your current string is: "
prompt1:.asciiz "\n Do you want to make any changes to the string? (y/n): " 
prompt2: .asciiz "\n Please Enter the Character that you want to Search for :"
prompt3: .asciiz "\n Please Enter the New Character :  "
prompt4: .asciiz "\n Your Final string is: "
 yes: .asciiz "y"
 No :.asciiz "n"
 Buffer: .space 40
.text
 li $v0, 4
 la $a0, prompt0
 syscall 

 li $v0,8        # take in input
 la $a0, Buffer      # load byte space into address
 li $a1, 40          # allot the byte space for string
 move $t0,$a0        # save string to t0
 syscall

li $v0,4
la $a0,prompt        # load and print "you wrote" string
syscall

la $a0, Buffer       # reload byte space to primary address
move $a0,$t0         # primary address = t0 address (load pointer)
li $v0,4         # print string
syscall



Loop:
    # Ask if user want to chnge rthe string or not
li $v0, 4     # syscall 4 (print_str)
la $a0, prompt1  # argument: string
syscall

     # GET INPUT FROM USER
li   $v0, 8   # get input
la   $a0, Buffer    # load byte space into address
li   $a1, 2         # allot the byte space for string
 move $t0,$a0        # save string to t0
syscall
#EDIT
lb $t1, yes  
lb $t0, 0($t0)   

#END EDIT

bne $t0, $t1, Exit

#IF YES, PRINT MESSAGE
li $v0,4
la $a0,prompt2
syscall


li $v0, 8   #get input
la $a0, Buffer  #load byte space into address
li $a1, 2      # allot the byte space for string
sw $t0,($a0)    #save string to t0
syscall

li $v0,4
la $a0,prompt3
syscall

li $v0, 8   #get input
la $a0, Buffer  #load byte space into address
li $a1, 2      # allot the byte space for string
move $t0,$a0    #save string to t0
syscall


la $a0,prompt     #load and print "you wrote" string
li $v0,4
syscall


la $a0, Buffer  #reload byte space to primary address
move $a0,$t0    # primary address = t0 address (load pointer)
li $v0,4        # print string
syscall
j Loop


 Exit:

li $v0,10       #end program
syscall 
     jr $ra     

这是我想转换为mips的C程序:

#include <stdio.h>
#include <string.h>

int main()
{
    char str[40], ch, Newch;
    int i;

    printf("\n Please Enter any String :  ");
    gets(str);

    printf("\n Please Enter the Character that you want to Search for :  ");
    scanf("%c", &ch);

    getchar();

    printf("\n Please Enter the New Character :  ");
    scanf("%c", &Newch);

    for(i = 0; i <= strlen(str); i++)
    {
        if(str[i] == ch)  
        {
            str[i] = Newch;
        }
    }

    printf("\n The Final String after Replacing All Occurrences of '%c' with '%c' = %s ", ch, Newch, str);

    return 0;
}

推荐答案

for循环按以下方式转换为汇编:

A for loop is translated into assembly as follows:

for ( initializer; condition; increment ) {
    body
}

首先,将其转换为C语言中的while循环:

first, transform that into a while loop in C:

initializer;
while ( condition ) {
    body
    increment
}

下一步,将while转换为汇编,如下所示:

next, translate the while into assembly as follows:

LoopTop:
    if ( ! condition ) goto ExitTheLoop;
    body
    increment
    goto LoopTop;
ExitTheLoop:


打印部分很简单,只需使用自己的系统调用打印每个组件.您的打印语句将分解为打印一个常量字符串,然后打印一个可变字符,然后是一个常量字符串,另一个变量字符,一个常量字符串,您翻译的字符串,最后是一个空格或包含空格的常量字符串:7个全部进行系统调用.


The print part is simple, just print each individual component each with its own syscall.  Your print statement will break down into printing a constant string, followed by a variable character, followed by a constant string, another variable character, a constant string, your translated string, and finally a single space or constant string holding a space: 7 individual syscalls in all.

这篇关于使用mips替换字符串的特定字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆