Удалить из строки все слова нечетной длины - C (СИ)
Формулировка задачи:
Задание такое: Дана строка символов. Удалить из нее все слова нечетной длины. Слова отделяются друг от друга одним пробелом. Где тут ошибка?
#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> int main(void) { char str[40], newst[40], shag=' ', *s; unsigned int top; gets(str); strcpy(s,str); while (true ) { top=strlen(s); if(top%2==0) { strcat(newst,s); strcat(newst,&shag); s+=top; } } strcat(newst,"\0"); puts(newst); getch(); return 0; }
Решение задачи: «Удалить из строки все слова нечетной длины»
textual
Листинг программы
#include <stdio.h> #include <string.h> int main( void ){ const int SIZE = 40; char str[SIZE], newstr[SIZE]; char *token = NULL; fgets(str, SIZE, stdin); puts(str); newstr[0] ='\0'; token = strtok(str, " "); while ( token ){ if ( strlen(token) % 2 == 0 ){ strcat(newstr, token); strcat(newstr, " "); } token = strtok(NULL, " "); } puts(newstr); getchar(); return 0; }
Объяснение кода листинга программы
В этом коде:
- Объявлены две строки: исходная
str
и новаяnewstr
. - С помощью
fgets
вstr
считывается строка из стандартного ввода. - С помощью
puts
эта строка выводится на экран. - Первый символ новой строки устанавливается в
\0
. - С помощью
strtok
строкаstr
разделяется на токены (слова) по пробелу. - Пока токены не закончатся, они проверяются на нечетную длину с помощью оператора
%
. Если длина нечетная, то токен не добавляется в новую строку. - Если длина токена четная, то он добавляется в новую строку с помощью функции
strcat
. После добавления токена, добавляется пробел с помощьюstrcat
. - Выводится новая строка с помощью
puts
. - С помощью
getchar
считывается символ из стандартного ввода (для завершения работы программы). - Программа возвращает 0, что означает успешное завершение работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д