Помогите найти ошибку
Язык 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.