Постановка задачи: Выравнивание строки заключается в том, что между ее отдельными словами дополнительно вносятся пробелы так, чтобы длина строки стала равной заданной длине (предполагается, что требуемая длина не меньше исходной), а последнее слово строки сдвинулось к ее правому краю. Составить программу выравнивания заданной строки текста.
я сделал так. но не совсем правильно работает. подскажите, как починить?
| Код | #include <stdio.h> #include <conio.h> #include <iostream.h> #include <string.h>
void main() { FILE *in,*out; /* otkritie faila */ if ((in = fopen("\\test.txt", "rt")) == NULL) cout << "Cannot open input file.\n"; if ((out = fopen("\\out.txt", "wt")) == NULL) cout << "Cannot open output file.\n";
// peremennie char str1[30]="", str[30]="",str2[30]=""; char *ptr; int n;
clrscr(); fgets(str,30,in); // polu4aem stroku iz faila cout<<"original: "<<str<<"\n\n"; //vivodim ee na ekran
n=1; //skolko dop. probelov vstavlyat'
ptr=strchr(str,' '); //is4em 1y probel strncpy(str1,str,ptr-str); //v str1 kopiruem vse, 4to do nego strcpy(str2,ptr+n); //v str2, vse, 4to posle strcat(str1," "); // dobavlyaev v str2 (n+1) probel strcpy(str,str1); // sozdaem novuyu str s dop. probelom strcat(str,str2);
// cout<<"\n\nstr1: "<<str1<<"\nstr2: "<<str2; //vivod str1 i str2 while (strlen(str)<30) // shirina stroki doljna bit 30 znakov { ptr=strchr(str2,' '); // is4em probel vo vtoroy polovine stroki if (ptr) //esli nawli { strncat(str1,str2,ptr-str2); // dobavlaem infu v str1 iz str2 strcpy(str2,ptr); // a iz str2 udalyaem etot probel
cout<<"\n\nstr1: "<<str1<<"\nstr2: "<<str2; //vivod for (int j=0;j<=n;j++) strcat(str1," "); //dobavlyaem probeli }
else //kogda v str2 net probelov (prowli do konca) { cout<<"\n\nnew str: "<<str; //vivodim vsu stroku
ptr=strchr(str,' '); //naxodim v ney probel strncpy(str1,str,ptr-str); //v str1 zanosim vse do probela strcpy(str2,ptr); //v str2 - vse posle
cout<<"\n\n!str1: "<<str1<<"\nstr2: "<<str2; n++; } strcpy(str,str1); strcat(str,str2); } cout<<"\n\nProcessed: "<<str; //gotovaya stroka
// zakrivaem faili fclose(in); fclose(out); }
|
|