-1

I need to get the length of the palindrome of the word in a string. Ex. tomyot length =2. I wrote the following code but it doesn't work.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {

    char str[20] = "tomyot";
    char rstr[20];
    strcpy(rstr, str);
    strrev(rstr);
    int i,j;
    int count = 0;
    int s=0;

    for(i=0;i<strlen(str); i++){

        for(j=s;j<strlen(str); j++){
            if(str[i] == rstr[j]){
                count+=1;
                s = j+1;
                continue;
            }

        }   

    }
    printf("%d",count);


    return 0;
}
Avishka Dambawinna
  • 1,180
  • 1
  • 13
  • 29

2 Answers2

3

Replace

sizeof(str)

with

strlen(str)

The former one returns the size of the str array which is 20 and the latter one returns the length of the contents of str which is 6.

kiran Biradar
  • 12,700
  • 3
  • 19
  • 44
0

I have made the changes and put comments in the code in /* .. */ blocks:

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

int main(void) {
    /*
      - You don't need to compute the reverse of the string, the input string itself will do your work.
      - strrev() is not supported in GCC, so don't use it. See https://stackoverflow.com/a/8534275/4688321
        for alternative implementation
     */
    char str[20] = "tomyot";
    int len_str = strlen(str);
    int i, j, cnt = 0;
    /*
     - You don't need two nested for loops, one loop with two pointers:
       first from the start of string and other from end of the string will do
     - Just compare the ith character (from start) with the jth character (from end)
     - Stop wherever i and j cross each other i.e. when i > j
     */
    for (i = 0, j = len_str - 1; i <= j && i < len_str - 1; i++, j--) {
        if (str[i] == str[j]) {
            cnt++;
        }
        else break;
    }
    printf("%d\n", cnt);
    return 0;
}
kiner_shah
  • 3,939
  • 7
  • 23
  • 37