Spaces check in a Palindrome checking recursive algo.

  • Thread starter Thread starter Peon666
  • Start date Start date
Click For Summary

Discussion Overview

The discussion revolves around a recursive algorithm for checking if a string is a palindrome, specifically addressing the issue of spaces in the input string. Participants explore various approaches to modify the algorithm to account for spaces, as well as technical challenges encountered in the implementation.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant presents a code snippet for a palindrome-checking function that does not account for spaces and seeks assistance to modify it.
  • Another participant suggests preprocessing the string to remove spaces before passing it to the palindrome function, proposing a separate function for this task.
  • A participant questions whether the space removal needs to occur within the recursive function or if it can be done beforehand.
  • Some participants express agreement with the idea of preprocessing the string to simplify the palindrome check.
  • A participant shares a modified version of the palindrome function that attempts to handle spaces but encounters an error related to the use of a static variable for string length.
  • Another participant questions the necessity of the static variable, suggesting that it may not be needed for the algorithm's functionality.

Areas of Agreement / Disagreement

Participants generally agree on the idea of preprocessing the string to remove spaces, but there is no consensus on the best implementation approach or the necessity of using a static variable in the function.

Contextual Notes

Some participants note the error encountered with the static variable and discuss the implications of using static versus non-static variables in this context. The discussion remains open regarding the optimal way to handle spaces in the palindrome-checking algorithm.

Peon666
Messages
107
Reaction score
0
Hi all.

I have a little problem with a code that checks whether an input string is a palindrome or not. But my problem is that it does not check for the spaces, and I want it to do so.

Here's the code:

Code:
#include <stdio.h> 
#include <string.h>



int isPalindrome (char *str)
{
	static int length = strlen (str);
	if (length<1)
		return 1;
	if (str[0] == str[length-1])
	{
		length -= 2;
		return isPalindrome (str+1);/*Recursive call as the function isPalindrome 
		is called again within itself*/
	}
	else return 0;
}


int main (void)
{
	int result;
	char str[256];
	printf ("\nPlease type a string: \n");
	gets (str);/*Input a string to check whether it is a palindrome or not*/

	result = isPalindrome (str);/*The function isPalindrome is called.It takes a string 
	argument and returns a value 0 or 1 which is stored in 
	the integer variable "result"*/
	if (result==1) 
		printf ("\n******Input string is a palindrome string.************\n");
	else
		printf ("\n******Not a palindrome******\n");
	return 1;
}

For example, if the input string is:

a man a plan a canal panama

It says that this is NOT a palindrome (spaces problem). I'd be really helpful if anyone sorts this out for me.

Thanks.
 
Technology news on Phys.org
How about if you preprocessed the string to remove spaces before passing it to your isPalindrome function? A removeSpaces function could take two strings (pointers to char) as parameters, with one string the input string and the other contained all the nonspace characters of the first string.
 
Is this a common programming assignment? The similar threads below show that it's been asked about before :smile:.

But yeah, I like the preprocessing idea.
 
Alright. Here's a bit modified code and it works right:

Code:
int isPalindrome (char *str)
{
	static int length = strlen (str);
    if (length<1)
		return 1;
        if (str[0] == ' ')
        {
            str++;
            length -= 1;
            return isPalindrome(str);
        }
        if (str[length-1] == ' ')
        {
            length -= 1;
            return isPalindrome(str);
        }
	if (str[0] == str[length-1])
	{
		length -= 2;
		return isPalindrome (str+1);/*Recursive call as the function isPalindrome
		is called again within itself*/
	}
	else return 0;
}

I've encountered another bit of problem, while running the code in VC++ 6.0. It was fine when I was running it in Code Blocks but in VC it gives the following error with this statement:

Code:

static int length = strlen (str);

ERROR: Initializer is not a constant.

But when I remove the 'static', the output is not right. What should I do?
 
Does the space removal have to be in the same recursive function? Can you just remove the spaces before feeding it to your isPalindrome?
 
It can be in a separate function and spaces can be removed any way.
 
Peon666 said:
It can be in a separate function and spaces can be removed any way.

So try that? :smile: If your original function was working except for the spaces, it might be easier to build on if you leave that part relatively intact. Debugging can sometimes be simplified when you keep things "modular" and build in pieces.
 
Peon666 said:
Alright. Here's a bit modified code and it works right:

Code:
int isPalindrome (char *str)
{
	static int length = strlen (str);
    if (length<1)
		return 1;
        if (str[0] == ' ')
        {
            str++;
            length -= 1;
            return isPalindrome(str);
        }
        if (str[length-1] == ' ')
        {
            length -= 1;
            return isPalindrome(str);
        }
	if (str[0] == str[length-1])
	{
		length -= 2;
		return isPalindrome (str+1);/*Recursive call as the function isPalindrome
		is called again within itself*/
	}
	else return 0;
}

I've encountered another bit of problem, while running the code in VC++ 6.0. It was fine when I was running it in Code Blocks but in VC it gives the following error with this statement:

Code:

static int length = strlen (str);

ERROR: Initializer is not a constant.

But when I remove the 'static', the output is not right. What should I do?
That was something I noticed before but didn't comment on. Why do you have length being static? I can't think of any good reason for this variable to be static.
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
Replies
55
Views
7K
  • · Replies 97 ·
4
Replies
97
Views
10K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 8 ·
Replies
8
Views
8K
  • · Replies 9 ·
Replies
9
Views
2K
Replies
2
Views
2K