Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите найти ошибку (http://www.tehnari.ru/f41/t100251/)

aliya 23.12.2014 01:08

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

#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;
}


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.