Удалить все слова, длина которых меньше 3 символов - C (СИ)
Формулировка задачи:
Дан текст. Удалить все слова, длина которых меньше 3 символов. Все слова, длина которых больше 3 символов, объединить в одно. В конце строки вывести сумму чисел, встречающихся в строке.
Решение задачи: «Удалить все слова, длина которых меньше 3 символов»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char res[256], str[256] = "Eniki 2i beniki 12 6 a5 eli bb vareniki";
size_t i, index = 0, res_index = 0;
int sum = 0;
for (i=0; i <= strlen(str); i++)
{
if (str[i] == ' ' || str[i] == '\0')
{
if (i - index >= 3)
{
strncpy(&res[res_index], &str[index], i - index + 1);
res_index = strlen(res) - 1;
}
index = i + 1;
}
if (isdigit(str[i]))
sum += str[i] - '0';
}
printf("%s %d\n", res, sum);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с строками и символами.
- Объявление основной переменной программы - строки
str, которая содержит исходную строку для обработки. - Объявление вспомогательных переменных:
res- для хранения результата,indexиres_index- для контроля переполнения буфера при копировании. - Объявление переменной
sumдля подсчета количества чисел в исходной строке. - В цикле проходим по каждому символу исходной строки.
- Если текущий символ является пробелом или завершающим нулевым символом, то копируем в результирующую строку все символы, начиная с первого символа после предыдущего пробела и заканчивая текущим пробелом (или нулевым символом).
- Если текущий символ является числом, то добавляем его к сумме.
- После завершения цикла выводим на экран результирующую строку и сумму чисел.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.