I need help to write a program that generates palindrome.I managed to make reverse the string but I couldn't combine original string and reverse string together. When I write abc i need to get abccba or when I write hello I need to get helloolleh. Now I only get cba or olleh. Can someone help me with this problem?
.data
msg1: .asciiz "Enter the length of your input: "
msg2: .asciiz "Enter your input: "
msg3: .asciiz "Output of the program is: "
output: .space 256 # will store the output palindrome
.text
la $a0,msg1
li $v0,4
syscall
li $v0,5
syscall
move $s1,$v0 # $s1 has the length of the string
la $a0,msg2
li $v0,4
syscall
li $a1,1024
li $v0,8
syscall
move $s0,$a0 # $s0 has the starting address of the string
#
# YOUR CODE GOES HERE(You can use additional labels at the end)
#
move $a3,$s0
move $a1,$s1
add $a3,$a3,$a1
la $a2, output($zero)
jal reverse
la $a0,msg3
li $v0,4
syscall
la $a0,output($zero)
li $v0,4
syscall
li $v0,10
syscall
reverse:
# $a0 - address of string to reverse
# a1 - length of the string
# a2 - address of string where to store the reverse
addi $sp, $sp, -4
sw $ra, 0($sp)
bltz $a1, reverse_end
lb $t0, 0($a3)
subi $a1, $a1, 1
subi $a3, $a3, 1
sb $t0, 0($a2)
addi $a2, $a2, 1
jal reverse
reverse_end:
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra
Edit:Also this is the C++ implementation of palindrome generation.
C++ Implementation of the Recursive Algorithm for Palindrome Generation
#include <iostream>
#include <string>
using namespace std;
string palindrom(string input, int rem_length)
{
if(rem_length!=0)
{
input=input.substr(0,1)+palindrom(input.substr(1,input.length()-1), \\
rem_length-1)+input.substr(0,1);
}
return input;
}
int main()
{
string input;
cin >> input;
input = palindrom(input, input.length());
cout << input<< endl;
system("pause");
return 0;
}