Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 23.12.2014, 01:08   #1 (permalink)
aliya
Новичок
 
Регистрация: 23.12.2014
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите найти ошибку

Язык C++;
Дан любой текстовый файл, в котором 5 пробелов подряд означают абзац.
С клавиатуры пользователь вводит значение n, по которому идёт выравнивание. Необходимо выровнить текст по ширине (как в ворде), равномерно вставляя пробелы между слов. 5 пробелов в выходном файле должно отсутствовать. Абзац выделяется пустой строкой. Никак не пойму, в чём ошибка. Помогите пожалуйста Вот мой код:

#include "stdafx.h"
#include <fstream>
#include <string.h>
#include <iostream>
using namespace std;


void peres (char stroka[], char slovo[], int &l, int n, int &k, ofstream &out)
{
int i=0;
int r=n-l;//разница между количеством символов и введенным значением n
int kol=r/(k-1);//количество пробелов в идеальном случае
int kpr=r%(k-1);//количество пробелов сверх идеального случая которые нужно распределить равномерно
if (kpr!=0)
{
for (int w=kpr; w>0; w--)
{
for (i; stroka[i]!=' '; i++)
out<<stroka[i];
for (int q=0; q<=kol+1; q++)
out<<' ';
}
for (int l=k-1-kpr; l>=0; l--)
{
for (i; stroka[i]!=' '; i++)
out<<stroka[i];
for (int p=0; p<=kol; p++)
out<<' ';
}
}
else
{
for (int o=k-1; o>=0; o--)
{
for (i; stroka[i]!=' '; i++)
out<<stroka[i];
for (int a=0; a<=kol; a++)
out<<' ';
}
}
out<<'\n';
int u=0;
for (u; slovo[u]!=' '; u++)
stroka[u]=slovo[u];
stroka[u]=' ';
l=0;
k=1;
l+=strlen(slovo);
}
int main()
{
int l=0, s=0, n, i=0, ab, k=0, j=0;//l-количество символов, ab-количество пробелов, k-количество слов
ifstream in("a.txt");
ofstream out("b.txt");
char c, slovo[31], stroka[101];
cout<<"enter n"<<endl;
cin>>n;
in.get(c);
while (!in.eof())
{
switch (s)
{
case 0: if (c!=' '&&c!='\n')
{
slovo[i]=c;
i++;
s=1;
}
else if (c==' ')
{
ab=1;
s=2;
}
else s=0;
break;
case 1: if (c!=' '&&c!='\n')
{
slovo[i]=c;
i++;
s=1;
}
else if (c==' ')
{
slovo[i]=' ';
i++;
int m=i-1;
int v=i-1;
ab=1;
k++;
l+=strlen(slovo)+1;
if (l<=n)
{
for (j; slovo[m-v]!=' '; j++)
{
stroka[j]=slovo[m-v];
v--;
}
stroka[j]=' ';
j++;
}
else
{
l-=strlen(slovo)-1;
stroka[j]='\0';
j++;
if(k!=1)
peres(stroka,slovo,l,n,k,out);
else
{
for (int i=0; stroka[i]!='\0'; i++)
out<<stroka[i];
out<<'\n';
l=0;
l+=strlen(slovo);
k=1;
}
j=l+1;
i=0;
}
s=2;
}
else s=0;
break;
case 2: if (c==' ')
{
ab++;
if (ab==5)
{
out<<'\n'<<'\n';
s=0;
}
else s=0;
}
if (c=='\n') s=0;
else
{
slovo[i]=c;
i++;
s=1;
}
}
in.get(c);
}
if (l<=n)
{
stroka[j]='\0';
for (int i=0; stroka[i]='\0';i++)
out<<stroka[i];
}
in.close();
out.close();
system ("pause");
return 0;
}
aliya вне форума   Ответить с цитированием

Старый 23.12.2014, 01:08
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пожалуйста, прочитайте содержимое данных постов

Помогите найти ошибку
Помогите найти ошибку
Помогите найти ошибку
Помогите найти ошибку

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.