如何用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
这里的输入/输出结构不是很好,只是先写句子,然后输入并写下你想要得到的字符。希望这对你有帮助。