C++ . Работа со строками и файлами
Помогите в решении следующей задачи:
Напишите программу, переносящую слишком длинные строки. Слова разбивать нельзя (неумешающееся слово следует перенести целиком). Ширину строки считать равной 60.
Как вывести содержимого текстового файла знаю, логику тоже понимаю(нужно найти последний пробел до 60 символа в строке и все, что стоит до него вывести в одной строке, все остальное перенести в другую.. ) как реализовать не знаю....
Помогите пожалуйста!
А какой смысл?
если поменять на '\n', то вот как раз и будет конец строки, начало новой. После этого символа в пределах 60 символов все '\n' меняем на пробел и так далее
while (!finish)
{
for(i=current;i<current+60;i++)
{
if(str==0) {finish=TRUE;break}
if(str=='\n') str=' ';
}
while(str[i--]!=' ');
str='\n';
current=current+i+1;
}
Вроде так. Получается поделенный на строки символами '\n' массив.
Ай! совсем забыл, что при "переходе" на следующую строчку мы смотрим от начала массива, а не строчки. Исправлять пришлось.
если поменять на '\n', то вот как раз и будет конец строки, начало новой. После этого символа в пределах 60 символов все '\n' меняем на пробел и так далее
Точно,че то я не до тумкал.Однозначно +
while (!finish)
{
for(i=current;i<current+60;i++)
{
if(str==0) {finish=TRUE;break}
[color=red]if(str=='\n') str=' ';[/color]
}
while(str[i--]!=' ');
[color=red]str='\n';[/color]
current=current+i+1;
}
вообще-то str='\n'; нужно бы заменить на str[i+1]='\n'; но после if(str=='\n') str=' '; весь цыкл теряет смысл
char *last_space = NULL;
unsigned int length = 0;
for(char c = *ch; c!='\0'; ch++, c=*ch)
{
if(c=='\n')
{
*ch = ' ';
last_space = ch;
}
else if(c==' ')
{
last_space = ch;
}
else
{
length++;
if((length>=60)&&last_space)
{
*last_space = ' ';
length = last_space - ch;
last_space = NULL;
}
}
}
ой, ещё ошибся малость. времени мало было подумать, когда отвечал
char* str = "...текст, считанный из файла...";
int pos = 0;
char* p = str;
while (*p++)
{
if (pos++ > 60)
{
while (*(--p) != ' ');
*p = '\n';
pos = 0;
}
}
cout << str << endl;
...
А вот поинтереснее:
// переменные те же, что и в предыдущем примере
char* space = str;
while (*p++)
{
if (++pos < 60)
{
if (*p == ' ')
space = p;
else if (*p == '\n')
{
space = ++p;
pos = 0;
}
}
else
{
p = space;
*p = '\n';
pos = 0;
}
}
...