简体   繁体   中英

How to get the length of the relevant palindrome of a word in a string?

I need to get the length of the palindrome of the word in a string. Ex. to my ot 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;
}

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 .

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM