Palindrome program in C

一笑奈何 提交于 2019-12-20 07:56:22

问题


My program in C which is Palindrome has an error in its function. My function is not comparing the 2 characters in my string. When I type a single character it answers palindrome but if it is two or more always not palindrome.

Code:

          int IntStrlength=strlen(StrWord);
          int IntCtr2=0;
          int IntCtr=1, IntAnswer;
          while(IntCtr<=(IntStrlength/2)){
                printf(" %d %d\n", IntCtr2,IntStrlength);
               if(StrWord[IntStrlength] != StrWord[IntCtr2]){
                  IntAnswer=0;
                  printf(" %d=Not Palindrome", IntAnswer);
                  exit (0);
                 }//if(StrWord[IntCtr2]!=StrWord[IntStrlength]) <---------
               else{
                  IntCtr2++;
                  IntStrlength--;
                  }// else <--------
               IntCtr++;
          }//while(IntCtr<IntStrlength/2) <-----------
          IntAnswer=1;
          printf(" %d=Palindrome", IntAnswer);
          return ;

}

Single character:

Two or more characters:


回答1:


Why not write it like this

int wordLength = strlen(StrWord);
for (int i=0;i<(wordLength/2);i++) {
    if (StrWord[i] != StrWord[wordLength-i-1]) {
        return 0;
    }
}

return 1;

For words with an even length (say 8) the counter will go from 0 to 3, accessing all letters. For uneven words (say 7) the c ounter will go from 0 to 2, leaving the middle element unchecked. This is not necessary since its a palindrome and it always matches itself




回答2:


#include<stdio.h>
int check_palindrom(char *);
int main()
{
        char s1[20];
        printf("Enter the string...\n");
        gets(s1);

        int x;
        x=check_palindrom(s1);
        x?printf("Palindrom\n"):printf("Not Palindrom\n");
}
int check_palindrom(char *s)
{
        int i,j;
        for(i=0;s[i];i++);

        for(i=i-1,j=0;i>j;i--,j++)
                if(s[i]!=s[j])
                        return 0;
        if(s[i]==s[j])
                return 1;
}

Enter the string...

radar

Palindrom




回答3:


I've seen this algorithm before in a interview book called "Cracking the Coding Interview".

In it the author shows a very simple and easy implementation of the code. The code is below: Also here is a video explaining the code.

#include<stdio.h>
#include<string.h> // strlen()

void isPalindrome(char str[]);

int main(){

    isPalindrome("MOM");
    isPalindrome("M");
    return 0;
}




void isPalindrome(char str[]){

    int lm = 0;//left most index
    int rm = strlen(str) - 1;//right most index

    while(rm > lm){

        if(str[lm++] != str[rm--]){

            printf("No, %s is NOT a palindrome \n", str);
            return;
        }

    }

    printf("Yes, %s is a palindrome because the word reversed is the same \n", str);

}



回答4:


You can do this like this:

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

int check_palindrome(char string []);
int main()
{
        char string[20];
        printf("Enter the string...\n");
        scanf ("%s", &string);

        int check;
        check = check_palindrome (string);
        if (check == 0)
            printf ("Not Palindrome\n");
        else
            printf ("Palindrome\n");
        return 0;
}
int check_palindrome (char string [])
{
        char duplicate [];
        strcpy (string, duplicate);
        strrev (string);
        if (strcmp (string, duplicate) == 0)
           return 1;
        else
           return 0;
}

This uses the strcmp and strrev function.




回答5:


Take a look at this code, that's how I have implemented it (remember to #include <stdbool.h> or it will not work):

for(i = 0; i < string_length; i++)
    {
            if(sentence[i] == sentence[string_lenght-1-i])
                    palindrome = true;
            else
            {
                    palindrome = false;
                    break;
            }
    }

Doing that it will check if your sentence is palindrome and, at the first occurence this is not true it will break the for loop. You can use something like

if(palindrome)
     printf(..);
else
     printf(..);

for a simple prompt for the user.

Example :

radar is palindrome

abba is palindrome

abcabc is not palindrome

Please , pay attention to the fact that

Abba

is not recognized as a palindrome due to the fact that ' A ' and 'a' have different ASCII codes :

'A' has the value of 65

'a' has the value of 97 according to the ASCII table. You can find out more here.

You can avoid this issue trasforming all the characters of the string to lower case characters. You can do this including the <ctype.h> library and calling the function int tolower(int c); like that :

for ( ; *p; ++p) *p = tolower(*p);

or

for(int i = 0; str[i]; i++){
  str[i] = tolower(str[i]);
}

Code by Earlz, take a look at this Q&A to look deeper into that.

EDIT : I made a simple program to do this, see if it can help you

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <ctype.h>

void LowerCharacters(char *word, int word_lenth);

int main(void){

    char *word = (char *) malloc(10);
    bool palindrome = false;

    if(word == 0)
    {
        printf("\nERROR : Out of memory.\n\n");
        return 1;
    }

    printf("\nEnter a word to check if it is palindrome or not : ");
    scanf("%s", word);

    int word_length = strlen(word);

    LowerCharacters(word,word_length);

    for(int i = 0; i < word_length; i++)
    {
        if(word[i] == word[word_length-1-i])
            palindrome = true;
        else
        {
            palindrome = false;
            break;
        }
    }

    palindrome ? printf("\nThe word %s is palindrome.\n\n", word) : printf("\nThe word %s is not palindrome.\n\n", word);

    free(word);

return 0;

}

void LowerCharacters(char *word, int word_length){

    for(int i = 0; i < word_length; i++)
        word[i] = tolower(word[i]);
}

Input :

Enter a word to check if it is palindrome or not : RadaR

Output :

The word radar is palindrome.



来源:https://stackoverflow.com/questions/34784096/palindrome-program-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!