Mips程序计算段落中每个字符出现的次数



如何用Mips编写程序来计算段落中每个字符的出现次数?我用c语言写了这个程序,但不能转换成Mips。这是c代码

#include<stdio.h>
int main() {
char para[100];
printf("Enter Paragraph : ");
scanf("%[^n]s", para);
int length = strlen(para),i,j;
int freq[length]; //array of frequncy char
for(i = 0; i < strlen(para); i++) {
freq[i] = 1;
for(j = i+1; j < strlen(para); j++) {
if(para[i] == para[j]) {
freq[i]++;
para[j] = '0'; ////Set para[j] to 0 to avoid printing visited character
}
}
}
printf("Characters and their corresponding frequenciesn");
for(i = 0; i < length; i++) {
if(para[i] != ' ' && para[i] != '0')
printf("%c-%dn", para[i], freq[i]);
}


return 0;
}

不确定段落,但我有一个字符串;

.data 
string:      .space 100                    
.text
main: 
la $a0, string                             # input string
li $a1, 100                                # maximum size of string
li $v0, 8                                  # represents reading string
syscall                                    # call system
li $v0, 12                                 # 12 represents reading character
syscall                                    # call system  
move $s2, $v0                              # $s2= character
li $s1, 100                                # $s1= maximum size of string

li  $t4, 0                                 # count (number of occurrances)
li  $t0, 0                                 # i(index)
bge $t0, $s1, print                        # i>= string length, exit    
loop:                        
lb  $s0,($a0)                              # the first character of string into $s0 
bne $s0, $s2, skip                         # skip increasing the counter if item does not equal               
add $t4, $t4, 1                            # otherwise increment the counter    
skip: 
addiu $a0, $a0, 1                            # increment index
beq $s0,0,print                             # go to print label if $s0=0 so $s0 ='' 
j  loop                                    # go back to loop
print:                                     # print the result
#addi $v0, $t4, 0                           # $v0= $v4= number of occurrences
li $v0,1                                   # 1 represents printing integer                   
move $a0,$t4                               # $a0=$t4 = number of occurances of character
syscall                                    # call system    
# Terminate the program
li $v0, 10                                 # 10 represents exit
syscall                                    # call system

这里的输入/输出结构不是很好,只是先写句子,然后输入并写下你想要得到的字符。希望这对你有帮助。

相关内容

最新更新