Я новичок в C, но пытаюсь создать скрипт, который читает ввод и, игнорируя специальные символы и пробелы, выводит обратную сторону ввода независимо от того, образуют ли буквы палиндром.
IЯ пытался изменить длину цикла в функции исправления, так как я думаю, что именно в этом проблема, но из того, что я могу сказать, strlen () работает, как и ожидалось, цикл просто останавливается, когда встречает пробел.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 1000 /* The maximum number of characters in a line of
input
*/
void fix(char str[], char str2[]);
int main()
{
char text[MAX], text2[MAX], text3[MAX], text4[MAX], temp;
int i, j;
int length;
puts("Type some text (then ENTER):");
/* Save typed characters in text[]: */
fgets(text, MAX, stdin);
length = strlen(text) - 1;
strcpy(text2, text);
i = 0;
j = length-1;
while(i < j){
temp = text[i];
text[i] = text[j];
text[j] = temp;
i++;
j--;
}
/* Analyse contents of text[]: */
printf("Your input in reverse is:\n");
printf("%s", text);
fix(text, text3);
printf("%s\n", text3);
fix(text2, text4);
printf("%s\n", text4);
if(strcmp(text4, text3) == 0)
printf("Found a palindrome!\n");
return 0;
}
void fix(char str[], char str2[]){
int i;
for(i = 0; i < strlen(str)-1; i+=1){
if (isalpha(str[i])){
str2[i] = tolower(str[i]);
}
}
}
При вводе «Медсестры, беги» обратная строка выводится корректно, но не выводится «Найден палиндром!»
При печати текста 3 и 4 печатается «нур» и«медсестры» соответственно.
Кажется, что цикл останавливается, когда он встречается с пробелом, но я не могу понять, почему, поскольку он должен идти, основываясь на длине полного ввода.