/*
* @file lab6_2.cpp
* @author Гавалян Д.Є, гр. 515i
* @date 13 травня 2025
* @brief Лабораторна робота № 6, варiант 19
*
* Рядки.Параметри командного рядка.Завдання 2
*/
#include <stdio.h>
#include <string.h>
#include "module.h"
#include <locale.h>
int main() {
setlocale(LC_ALL, "");
char str[256];
printf("Введiть рядок:");
fgets(str, sizeof(str), stdin); // зчитування рядка з пробілами
// Видаляємо символ нового рядка \n, якщо він є
size_t len = strlen(str);
if (len > 0 && str[len - 1] == '\n') {
str[len - 1] = '\0';
}
// Виділяємо місце під %20 (припустимо, запас)
char buffer[768]; // тричі більший буфер для замін
strcpy(buffer, str); // копіюємо введений рядок
int count = process_spaces(buffer);
printf("Кiлькість замiн: %d\n", count);
printf("Результат: %s\n", buffer);
return 0;
}
#include <string.h>
#include "module.h"
/**
* Заміна всіх пробілів у рядку на символи %20
*
* @param str — вхідний/вихідний рядок
* @return кількість замінених пробілів
*/
int process_spaces(char* str) {
int count = 0;
int length = strlen(str);
// Рахуємо кількість пробілів
for (int i = 0; i < length; i++) {
if (str[i] == ' ') count++;
}
if (count == 0) return 0;
// Обчислюємо нову довжину
int new_len = length + 2 * count;
str[new_len] = '\0';
// Переписуємо з кінця
for (int i = length - 1, j = new_len - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[j--] = '0';
str[j--] = '2';
str[j--] = '%';
}
else {
str[j--] = str[i];
}
}
return count;
}
#ifndef MODULE_H
#define MODULE_H
/**
* Заміна пробілів у рядку на %20
*
* @param str — вхідний рядок, у якому потрібно зробити заміни
* @return кількість виконаних замін
*/
int process_spaces(char* str);
#endif // MODULE_H