[英]How to get the length of the relevant palindrome of a word in a string?
我需要获取字符串中单词的回文长度。 前任。 到我的ot长度 =2。 我写了以下代码,但它不起作用。
#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;
}
代替
sizeof(str)
和
strlen(str)
前一个返回str
数组的大小,即20
,后一个返回str
内容的长度,即6
。
我已经进行了更改并在/*.. */
块中的代码中添加了注释:
#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.