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.