简体   繁体   English

如何获取字符串中单词的相关回文长度?

[英]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.我的ot长度 =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 .前一个返回str数组的大小,即20 ,后一个返回str内容的长度,即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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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