I have written a program trying to determine wether a string is a palindrome or not, regardless of special characters/uppcaser letters etc. I want to make it able to loop. I have used different methods for this, but it all seems to give me the same result.
When I press 1 at the end it basically takes whatever value I already gave it earlier and gives me the same response (wether or not it is palindrome and asks to restart again), as if its fast forwarding to the same question. I can then hit 0 and it closes like it should.
All the code is in there but Im pretty sure its something in main()
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define ARR_SIZE 50
int isPalindrom(char inputString[]);
void isAlphabet(char inputString[], char returnstring[]);
void smol(char inputString[]);
void smol(char inputString[])
{
for (int i = 0; i < strlen(inputString); i++)
{
inputString[i] = tolower(inputString[i]);
}
}
void isAlphabet(char inputString[], char returnstring[])
{
int length, i, j = 0;
length = strlen(inputString);
for (i = 0; i < length; i++)
{
if (isalpha(inputString[i]) != 0)
{
returnstring[j] = inputString[i];
j++;
}
returnstring[j] = '\0';
}
}
int isPalindrom(char inputString[])
{
inputString[strlen(inputString)] = '\0';
int length = strlen(inputString);
int length2 = length;
char copy[ARR_SIZE];
for (int i = 0; i < length2; i++)
{
copy[i] = inputString[length - 1];
length--;
}
copy[length2] = '\0';
int check = 0;
for (int i = 0; i < length2; i++)
{
if (copy[i] == inputString[i])
{
check++;
}
}
if (check == length2)
return 1;
else
return 0;
}
int main(void)
{
char string[ARR_SIZE];
char returnstring[ARR_SIZE];
int decide;
int ret;
do {
printf("Enter a string!\n");
fgets(string, ARR_SIZE, stdin);
isAlphabet(string, returnstring);
smol(returnstring);
ret = isPalindrom(returnstring);
if (ret == 1)
printf("Palindrom!\n");
else
printf("Not a Palindrom\n");
printf("Do you want to restart? Yes = 1, No = 0 ");
scanf_s("%d", &decide);
} while (decide == 1);
return 0;
}