Я пытаюсь сделать palindrome finder в C, и я не знаю, где это происходит, независимо от того, что я получаю вывод false на 2 разных способах, которые я пытался кодировать. Я только что начал C (на прошлой неделе), поэтому, если бы вы могли объяснить вещи просто, это было бы здорово, спасибо!Palindrome finder in C?
//way1
#include <stdio.h>
int read_char() { return getchar(); }
void read_string(char* s, int size) { fgets(s, size, stdin); }
void print_char(int c) { putchar(c); }
void print_string(char* s) { printf("%s", s); }
int is_palin(char word[]) {
int m = 0;
int arr_len = sizeof(word)/sizeof(char); //change to char_index
int n = arr_len;
int t = 1;
if(n % 2 != 0) {
for (m=0; m < ((n-1)/2); m++) {
if(word[m] != word[n-m-2]) {
t = 0;
}
else {
t = 1;
}
}
}
else {
for (m=0; m < (n/2)-1; m++) {
if(word[m] != word[n-m-2]) {
t = 0;
}
else {
t = 1;
}
}
}
if(t == 1) {
return 1;
}
else {
return 0;
}
}
int main(void) {
char word[6] = "civic";
int arr_len = sizeof(word)/sizeof(char);
if (is_palin(word) == 1) {
printf("is palin\n");
}
else {
printf("is not palin\n");
}
printf(word);
printf("\n");
printf("%d\n", arr_len);
return 0;
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//way2
#include <stdio.h>
int read_char() { return getchar(); }
void read_string(char* s, int size) { fgets(s, size, stdin); }
void print_char(int c) { putchar(c); }
void print_string(char* s) { printf("%s", s); }
int is_palin(char word[]) {
int m = 1;
int input_length = sizeof(word);
int j = input_length-1;
int i = 0;
for(i=0; i <= j; i++) {
if(word[i] != word[j]) {
m = 0;
j--;
}
}
if(m == 1) {
return 1;
}
else {
return 0;
}
}
int main(void) {
char word[6] = "civic";
int input_length = sizeof(word);
if (is_palin(word) == 1) {
printf("is palin\n");
}
else {
printf("is not palin\n");
}
printf(word);
printf("\n");
printf("%d\n", input_length);
return 0;
}
'sizeof word' не приводит к тому, что вы ожидаете. Вам действительно нужна strlen() здесь. – wildplasser
..что вы бы нашли себя очень быстро, если бы использовали отладчик. «Я только что начал C (на прошлой неделе)« Хорошо, но вам нужно научиться отлаживать СЕЙЧАС, прежде чем писать код. –
... но включение нескольких инструкций printf() в стратегических точках может быть столь же эффективным, как * использование отладчика *. BTW: fgets() читает ввод *, включая окончательный '\ n' * Вы, вероятно, захотите сначала удалить это, прежде чем пытаться найти (нет) палиндромы. – wildplasser