Вывести слова с симметричным расположением букв - C (СИ)
Формулировка задачи:
Как сделать проверку того, что слово имеет симметрично расположенные буквы
Вот кодВвести строку, вывести на экран только слова с симметричным
расположением букв., а вот задание
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
const int BUFF_LEN = 80;
char buf[BUFF_LEN];
scanf("%s", buf, BUFF_LEN);
char sep [2]=" ";
char *istr;
istr = strtok (buf, sep);
while (istr != NULL)
{
istr = strtok (NULL,sep);
printf("%s\n", istr);
}
getch();
}Решение задачи: «Вывести слова с симметричным расположением букв»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main() {
const int BUFF_LEN = 80; //объявляем буфер для строки
char buf[BUFF_LEN];
scanf("%[^\n]", buf, BUFF_LEN); // читаемм строку с клавиатуры
int sym;
char * p = buf, *e, *n, *b, t;
for (;;) {
for (;*p && *p == ' '; ++p); // пробелы перед словом
if (!*p) break;
for (n = p; *n && *n != ' '; ++n); // до конца слова
e = n - 1; // последний символ слова
// проверяем симетричность
b = p;
sym = 1;
while (p < e && sym) (sym = (*p++ == *e--));
if (sym) {
t = *n; // добавляем '\0' чтобы можно было вывести
*n = '\0';
puts(b); // выводим в консоль
*n = t; // возвращаем символ обратно
}
p = n;
}
return 0;
}
Объяснение кода листинга программы
В этом коде используется язык программирования C.
- Переменные:
buf- буфер для строки, объявлен как массив символов.scanf- используется для чтения строки с клавиатуры.sym- используется для проверки симметричности слова.p- указатель на текущий символ в буфере.e- указатель на последний символ в текущем слове.n- указатель на последний символ в текущем слове.b- указатель на начало текущего слова.t- используется для хранения последнего символа слова.
- Цель программы: Цель программы - выводить слова с симметричным расположением букв.
- Описание работы программы:
- Строка считывается с клавиатуры и сохраняется в буфере
buf. - Затем программа начинает искать слова в буфере.
- Пробелы перед словом пропускаются.
- Переменная
nуказывает на последний символ текущего слова. - Переменная
eуказывает на последний символ слова, с которым сравнивается текущее слово. - Переменная
bуказывает на первый символ текущего слова. - Переменная
symиспользуется для проверки симметричности слова. - Если слово симметрично, оно выводится в консоль.
- После вывода слова указатель
nвозвращается обратно, чтобы можно было продолжить обработку следующего слова. - Если слово не симметрично, ничего не выводится.
- Цикл продолжается до тех пор, пока все слова в буфере не будут обработаны.
- Строка считывается с клавиатуры и сохраняется в буфере
- Обратите внимание на:
- Переменная
symинициализируется как 1, а не как 0. Это делается для того, чтобы при первом проходе циклаwhileусловие было истинным. - В строке
while (p < e && sym) (sym = (*p++ == *e--));используется постфиксная операция++и префиксная операция--. Это делается для того, чтобыpиeувеличивались и уменьшались на 1 одновременно. - Для добавления символа
\0в конец слова используется переменнаяt. Это делается для того, чтобы можно было корректно вывести слово в консоль. - Для возврата символа обратно используется оператор
*n = t;. Это делается для того, чтобы можно было продолжить обработку следующего слова.
- Переменная