Выровнять строку по ширине
Есть не рабочий код, прошу помочь.
Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
void main()
{
char str[200], str1[70];
char *start=str1, *p;
char raz[] = " .,?!;:-";
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите текст:n");
gets_s(str);
int i , z, j, k, a=0, kp;
while (strlen(str) > 59)//пока длина строки больше 59
{
i = 59;//ширина текста
kp = 0;//количество пробелов
str1 == " ";//очищение строки
while (strchr(raz, str[i]) == NULL);//пока не найдем разделитель
{
i--;//двигаемся к началу
kp++;
}
strncpy(str1, str, i);//копируем 59 символов в новую строку
str1[i + 1] = '';//заканчиваем новую строку
strcpy(str, str + (i + 1));//копируем хвост в начало старой строки
while (strlen(str1) < 60)//работаем с новой строкой
{
z = 2;
while (1)//пока не достигнем конца строки
{
p = strchr(start, ' ');//первый пробел от начала строки
if (p == NULL)//если пробела нет
{
z++;//количество пробелов между словами
}
j = p - str1;//позиция пробела
for (k = strlen(str1); k > j; k--)//сдвиг
str1[k] = str1[k - 1];//сдвигаем символ на предыдущий
kp--;//уменьшаем количество пробелов
if (kp == 0)//если пробелы закончились
break;//прерываем цикл
else//если пробелы не закончились
start = p + z;//начинаем с последнего пробела в начале строки
}
puts(str1);
}
}
system("pause");
}
#include <string.h>
#include <windows.h>
void main()
{
char str[200], str1[70];
char *start=str1, *p;
char raz[] = " .,?!;:-";
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите текст:n");
gets_s(str);
int i , z, j, k, a=0, kp;
while (strlen(str) > 59)//пока длина строки больше 59
{
i = 59;//ширина текста
kp = 0;//количество пробелов
str1 == " ";//очищение строки
while (strchr(raz, str[i]) == NULL);//пока не найдем разделитель
{
i--;//двигаемся к началу
kp++;
}
strncpy(str1, str, i);//копируем 59 символов в новую строку
str1[i + 1] = '';//заканчиваем новую строку
strcpy(str, str + (i + 1));//копируем хвост в начало старой строки
while (strlen(str1) < 60)//работаем с новой строкой
{
z = 2;
while (1)//пока не достигнем конца строки
{
p = strchr(start, ' ');//первый пробел от начала строки
if (p == NULL)//если пробела нет
{
z++;//количество пробелов между словами
}
j = p - str1;//позиция пробела
for (k = strlen(str1); k > j; k--)//сдвиг
str1[k] = str1[k - 1];//сдвигаем символ на предыдущий
kp--;//уменьшаем количество пробелов
if (kp == 0)//если пробелы закончились
break;//прерываем цикл
else//если пробелы не закончились
start = p + z;//начинаем с последнего пробела в начале строки
}
puts(str1);
}
}
system("pause");
}
Код:
Привет мир! Жизнь прекрасна.
Код:
***Привет***мир!***Жизнь***прерасна***
Вся идея сводиться к тому, что у вас в строке почти всегда будет получаться по 2 токена, задание в универе как всегда для изобретения велосипеда.
И я думаю, вам следует сначала выделить токены из строки в массив таким образом
Код:
setlocale(LC_ALL, "ru-Ru");
char Text[] = "Привет мир! Сегодня чудесный день, не правда ли? Можно сходить в кафе или погулять на природе. Всем удачи.";
char delim[] = " ";
cout << Text << endl;
char* ptr = strtok(Text, delim);
while (ptr != NULL)
{
ptr = strtok(NULL, delim);
}
char Text[] = "Привет мир! Сегодня чудесный день, не правда ли? Можно сходить в кафе или погулять на природе. Всем удачи.";
char delim[] = " ";
cout << Text << endl;
char* ptr = strtok(Text, delim);
while (ptr != NULL)
{
ptr = strtok(NULL, delim);
}