Проверка палиндрома с помощью массива

Я застрял на том, как проверить палиндром с помощью MASM.

#include <iostream>
#include <cstring>
#include<string>
#include <algorithm>
using namespace std;

extern "C"char test(char*, int);int main()
{
char arr[] = {NULL};cout << "Enter a string: " << endl;
cin >> arr;int name = strlen(arr);
test(arr, name);
if (name == 1)
{
cout << "It is a palindrome! " << endl;

}
else
cout << "Not a palindrome. " << endl;

return 0;
}

Я попросил пользователя ввести строку и вставить ее в массив. Я отправляю его в файл сборки, и он будет возвращать «1», если он истинен, или «0», если ложь.

.686
.model flat

.code_test PROC ;named _test because C automatically prepends an underscode, it is needed to interoperate
push ebp
mov ebp,esp ;stack pointer to ebp

mov eax,[ebp+8]
mov ecx,[ebp+12]
mov ebp,0
mov edi,0
mov edx,0loopMe:
cmp ebp,ecx
je True

mov al,[eax+edi]
mov bl,[edx+esi]
cmp al,bl   ;compare
jne false   ;if not equal then jump to false
inc edi
dec esi
jmp loopMe

True:
mov eax,1
jmp allDone

False:
mov eax,0
jmp allDoneallDone:
pop ebp
ret
_test ENDP

END

при вводе строки она всегда возвращает 0. Я проверил отладчик, и он всегда будет переходить к метке False, даже если значения равны. Любая помощь приветствуется.

-3

Решение

Вы в C ++ используете строку.

замещать

char arr[] = {NULL}; // by the way NULL here has no sence.

от

std::string arr;

И используйте метод строки, чтобы сделать то, что вы хотите:

0

Другие решения

поэтому я немного изменил код и заставил его работать.

int main()
{
char arr[32] = {NULL};cout << "Enter a string: " << endl;
cin >> arr;int name = strlen(arr);
int palindrome= test(arr, name);

if (palindrome )
{
cout << "It is a palindrome! " << endl;

}
else
cout << "Not a palindrome. " << endl;

return 0;
}

тогда для файла asm

.686
.model flat

.code_test PROC ;named _test because C automatically prepends an underscode, it   is needed to interoperate
push ebp
mov ebp,esp ;stack pointer to ebp

mov ebx,[ebp+8]
mov ecx,[ebp+12]
mov edx,ebx
add edx,ecx
dec edxloopMe:
cmp ebx,edx
jge True

mov ch,[ebx]
mov cl,[edx]
cmp ch,cl   ;compare
jne false   ;if not equal then jump to false
inc ebx
dec edx
jmp loopMe

True:
mov eax,1
jmp allDone

False:
mov eax,0
jmp allDoneallDone:
pop ebp
ret
_test ENDP

END

Моя единственная проблема сейчас заключается в том, что если я введу маму вместо мамы, она скажет, что это не палиндром. Мне просто нужно выяснить, как игнорировать дела в сборке.

-1

По вопросам рекламы [email protected]