C/C++

Задание на языке Cи

Дана строка текста, в которой нет начальных и конечных пробелов.
Необходимо изменить ее так, что бы длина строки стала равна
заданной длине (не меньше исходной). Это следует сделать путем
вставки между словами дополнительных пробелов. Количество
пробелов между отдельными словами должно отличаться не более
чем на 1.
#include <stdio.h>
#include <string.h>

struct spaces
{
int begin; /* первый символ пробельной последовательности */
int end; /* первый символ, следующий после пробелов */
};

int main()
{
const int size = 1000;
char str[size], str_tmp[size];
printf("Введите исходную строку текста. \n");
if( fgets(str, size, stdin) != NULL)
{
int len1 = strlen(str);
printf("Получилась длина строки -- %d.\n",len1);
int len2;
do
{
printf("Введите новую длину строки, большую предыдущей. \n");
scanf("%d",&len2); /* scanf_s */
} while(len2 <= len1 || len2 >= size);
/*
будем считать пробелы между словами
*/
struct spaces sp[size];
int count = 0, sum = 0;
for(int x = 0; x < len1; x++)
{
if(str[x] == ' ')
{
sp[count].begin = x;
sum++;
x++;
while(str[x] == ' ')
{
sum++;
x++;
}
sp[count].end = x;
count++;
}
}
/* сколько должно быть после вставки дополнительных пробелов
всего пробелов */
int new_sum = sum + (len2 - len1);
/* среднее количество пробелов между словами */
int moyen; /* = new_sum / count;*/
/* копируем слова из старой строки в новую, вставляя
между словами нужное количество пробелов */
int x = 0, j = 0, k = 0, count2 = count;
while( x < len1 )
{
while(x < sp[k].begin && k < count)
{
str_tmp[j++] = str[x++];
}
if(count2 > 0) moyen = new_sum / count2;
else moyen = 0;
for(int y = 0; y < moyen; y++)
str_tmp[j++] = ' ';
new_sum -= moyen;
count2--;
k++;
if(x >= sp[count-1].end)
{
while(x < len1)
{
str_tmp[j++] = str[x++];
}
}
x++;
}
str_tmp[j] = '\0';
/*printf("%s\n",str_tmp);*/
/* копируем обратно в первую строку */
strcpy(str,str_tmp);
printf("%s",str);
}
return 0;
}
Dj Ksenon (Xenon)
Dj Ksenon (Xenon)
92 644
Лучший ответ