Удалить из строки все слова нечетной длины - 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, что означает успешное завершение работы.