Palindrome program

Jun 28, 2022 at 9:28am
Write a program that reads a word into a C-string (a character array). The program should then determine whether the word would be a palindrome if we remove the first character and add it at the back of the word. Use only C-string functions and C-strings.

so for example
Banana
if we take the B and add it to the back , ananaB it will become a Palindrome.
Can anyone help with this please?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

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

int main(){
    char string1[20];
    int i, length;
    int flag = 0;

    printf("Enter a string: ");
    scanf("%s", string1);

    length = strlen(string1);

    for(i=0;i < length ;i++){
        if(string1[i] != string1[length-i-1]){
            flag = 1;
            break;
           }
        }

    if (flag) {
        printf("%s is not a palindrome ", string1);
    }
    else {
        printf("%s is a palindrome ", string1);
    }
    return 0;
}


This is what I got so far, its not entirely correct but atleast it can read if its palindrome or not
Jun 28, 2022 at 9:35am
ananaB is not a palindrome.

If you don't remove the first character then it will become BananaB which is a palindrome.

Jun 28, 2022 at 9:36am
...if we remove the first character and add it at the back of the word


Why don't you do it ?
Jun 28, 2022 at 9:57am
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main() {
	char string1[20] = {0};

	printf("Enter a string: ");
	scanf("%18s", string1);

	const size_t length = strlen(string1);

	string1[length] = string1[0];
	int flag = 0;

	for (size_t i = 1; !flag && i <= length; ++i)
		if (string1[i] != string1[length - i + 1])
			flag = 1;

	printf("%s is %sa palindrome\n", string1 + 1, (flag ? "not " : ""));
}



Enter a string: qwe
weq is not a palindrome

Enter a string: qqww
qwwq is a palindrome

Last edited on Jun 28, 2022 at 12:39pm
Jun 28, 2022 at 8:50pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

bool isPalindrome( char *s )
{
   int N = strlen( s );
   for ( char *p = s, *q = s + N - 1; p < q; p++, q-- ) if ( tolower( *p ) != tolower( *q ) ) return false;
   return true;   
}

int main()
{
   char str[20];
   cout << "Enter a string: ";
   cin >> str;
   cout << str << str[0] << ( isPalindrome( str + 1 ) ? " is " : " is not " ) << "a palindrome\n";
}


Enter a string: BaNanA
BaNanAB is a palindrome
Jun 28, 2022 at 10:23pm
Removing the first character in a string and pushing onto the back of the string doesn't automatically transform a non-palindrome into is-a-palindrome.

ananaB is still not a palindrome, a word or phrase that reads the same forwards and backwards.

Copy the first letter in the string and appending it to the end can make the word a palindrome, or it might not.
Jun 29, 2022 at 8:05am
George P wrote:
ananaB is still not a palindrome, a word or phrase that reads the same forwards and backwards.
While you are right regarding the same it would be a palindrome to the original.

Consider this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <string.h>

int main(){
    char string1[20];
    char string2[20]; // Note
    int i, length;
    int flag = 0;

    printf("Enter a string: ");
    scanf("%s", string1);

    length = strlen(string1);

strcpy (string2, string1 + 1); // Note
string2[length - 1] = string1[0]; // Note


    for(i=0;i < length ;i++){
        if(string1[i] != string2[length-i-1]){ // Note: string2
            flag = 1;
            break;
           }
        }

    if (flag) {
        printf("%s is not a palindrome ", string1);
    }
    else {
        printf("%s is a palindrome ", string1);
    }
    return 0;
}
Jun 30, 2022 at 5:47am
This is an interesting question. I wrote a code which seems clever to me because it compares the first half of a word with its second part starting at the end. Maybe it is too complicated for a beginner because of the lower case conversion or the "short" boolean at end. However it works fine as expected. I hope it helps you ++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <algorithm>
#include <string>

bool isPalindrome(std::string word)
{
    char letterFromStart; // char starting at the beginning
    char letterFromEnd;   // char starting from the end of the string

    for (int i = 0; i < (word.length() / 2); i++)
    {
        letterFromStart = word[i];
        letterFromEnd = word[(word.length() - 1) - i];

        if (letterFromStart != letterFromEnd) return false;
    }
    return true;
}

bool isPalindrome(std::string word);

int main()
{   // some words
    std::string words[4] = { "Level", "rAbbit", "raDar", "poTAtoe" };
    // convert each word to lower case
    for (std::string& s : words)
        std::for_each(s.begin(), s.end(), [](char& c) { c = std::tolower(static_cast<unsigned char>(c)); });
    // check all words in our array
    for (int i = 0; i < *(&words + 1) - words; i++)
        if (isPalindrome(words[i]) ? std::cout << words[i] << " is a palindrome" << std::endl 
                                   : std::cout << words[i] << " is NOT a palindrome" << std::endl);
    return 0;
}

level is a palindrome
rabbit is NOT a palindrome
radar is a palindrome
potatoe is NOT a palindrome
Last edited on Jun 30, 2022 at 3:00pm
Jun 30, 2022 at 5:10pm
Such a strange assignment. I don't expect to many words would turn into palindromes by moving the first letter to the back... eel is one. Any others?
Jul 1, 2022 at 8:59am
Not really. It's just an exercise in c-string manipulation...
Jul 1, 2022 at 10:32pm
Adding the first letter to the end means that the first and last letters are always panindromic. So you can instead just check if the word is a palindrome starting with the second letter.
Last edited on Jul 4, 2022 at 3:07pm
Jul 2, 2022 at 3:22am
Adding for first letter to the end

The exercise as given by the OP is not adding the first letter to the end, it is removing the first letter and putting it at the end.

The exercise is then to determine if the rearranged word is a palindrome.
Last edited on Jul 2, 2022 at 3:22am
Topic archived. No new replies allowed.