Дана строка текста, в которой нет начальных и конечных пробелов.
Необходимо изменить ее так, что бы длина строки стала равна
заданной длине (не меньше исходной). Это следует сделать путем
вставки между словами дополнительных пробелов. Количество
пробелов между отдельными словами должно отличаться не более
чем на 1.
C/C++
Задание на языке Cи
#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;
}
#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;
}
Александр Ганов
Спасибо!
Похожие вопросы
- Помогите решить данное задание, на языке программирования с++
- Правильно ли решено задание на языке программирования С++ ?
- Задание в языке Си
- Как написать код для этого задания на языке С++
- Помогите пожалуйста с остальными заданиями в языке С.
- Помогите пожалуйста с остальными заданиями в языке С
- Помогите пожалуйста с заданиями.В языке С.
- Помогите с заданием по программированию язык C(не С++)
- Правильно ли решено задание по Яндекс практикуму на тему Вектор, урок 4 на языке программирования С++ ?
- Задание 4 по Теме Функции. Перегрузка Функций. Рекурсия. На языке программирования C++