Код программы:
laba3::sortirovka()
{
FILE *f;
char str={0};
char s1[79]={0};
char s2[79]={0};
int i=0,j=0,k=0;
int flag=1;
long pos1=0,pos2=0;
int length=0;
int flag_perest=0;
int flag_flag=0;
fpos_t filepos;
f=fopen ("laba3.txt","r+");
do
{
//f=fopen ("laba3.txt","r+");
if (flag_perest==1)
{
for (i=0;i<79;i++)
{
//s1[i]='\0';
s2[i]='\0';
}
}
else
{
for (i=0;i<79;i++)
{
flag_flag=1;
pos1=0;
pos2=0;
s1[i]='\0';
s2[i]='\0';
}
}
i=0;
j=0;
if ((flag==1)&&(flag_perest==0))
{
//flag=0;
if (flag_flag!=1)
pos1=ftell(f);
fseek(f,pos2,pos1);
do
{
str=fgetc(f);
if (str!=' ')
{
s1[i]=str;
i++;
}
if ((i==80) || (feof(f)))
{
break;
}
}
while (str!=' ');
} //endif;
//pos=fgetpos(f,&filepos);
//pos=fseek(f,ftell(f),SEEK_CUR);
pos2=ftell(f);
fseek(f,pos2,po1);
do
{
str=fgetc(f);
if ((str!=' ')&&(!feof(f)))
{
s2[j]=str;
j++;
}
if ((feof(f))||(j==80))
{
break;
}
}
while (str!=' ');
if ((strlen(s1)) <= (strlen(s2))) // <=
{
k=j;
}
if ((strlen(s1)) > (strlen(s2)))
{
k=strlen(s1);
flag=1;
}
//i=j=0;
for (int m=0;m<k;m++)
{
if (s1[m]>s2[m])
{
flag=1;
break;
}
}
k=0;
/*if ((strlen(s1)) < (strlen(s2)))
{
length=strlen(s2);
}
else
{
length=strlen(s1);
} */
if (flag==1)
{
fseek(f,pos1,0);
do
{
fputc(s2[k],f);
k++;
}
while (k!=strlen(s2));
fputc(' ',f);
k=0;
do
{
fputc(s1[k],f);
k++;
}
while (k!=strlen(s1));
}
if (flag==0)
{
flag_perest=1;
}
else
{
flag_perest=0;
}
//fclose(f);
}
while (!feof(f));
fclose(f);
return 0;
}
Язык С++. Идея сортировки такая, берется первое слово и сранивается со всеми, затем если нужно слова переставляются, и цикл начинается заново и так пока не достигнется конец файла, затем берется 2е слово и сранивается с отсальными и т.д.
Писал программу, но запутался с функцией fseek(); т.е 1е слово со всеми сравнивается, а вот чтобы взять затем 2е не получается. И 2я проблема есть ли какая-нибудь функция удаления и смещения символов в файле, т.е например если в файле 2 строки klmno и abc то при перестановке получается abcno klmno.
Заранее благодарен за помощь.