IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Сортировка строк в файле в алфавитном порядке, Сортировка в С++
ninja
сообщение 10.05.2010 20:19
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добрый вечер, необходимо написать программу которая сортирует строки в файле в алфавитном порядке.
Код программы:

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.

Заранее благодарен за помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 11.05.2010 1:23
Сообщение #2


Гость






#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <string>

int main()
{
std::string s;
std::vector<std::string> lines;

// читаем файл в контейнер построчно
std::ifstream in_file("laba3.txt", std::ios::in);
while(getline(in_file, s))
lines.push_back(s);
in_file.close();

std::sort(lines.begin(), lines.end()); // сортируем контейнер

// и записываем отсортированный контейнер в новый файл
std::vector<std::string>::iterator i = lines.begin();
std::ofstream out_file("laba31.txt", std::ios::out);
for(; i != lines.end(); ++i)
out_file << *i << std::endl;
out_file.close();
return 0;
}

 К началу страницы 
+ Ответить 

Сообщений в этой теме
ninja   Сортировка строк в файле в алфавитном порядке   10.05.2010 20:19
volvo   Брррр... А что, сортировку обязательно написать са...   10.05.2010 20:51
ninja   Конечно можно, так даже будет удобней, я недавно н...   10.05.2010 20:59
volvo   Ты пример файла приведи, с которым работаешь...   10.05.2010 22:14
ninja   Пример файла sdfsdfsdfsdfsf fwfsdfsdf sdfwefs sdf...   10.05.2010 22:15
volvo   #include <algorithm> #include <iostream...   11.05.2010 1:23
ninja   Добрый день, Владимир спасибо огромное только это ...   11.05.2010 14:41
TarasBer   Вы путаете C и С++. Вам нужен просто C (судя по 1м...   11.05.2010 16:52
volvo   Ага... Особенно - судя вот по этой части первого п...   11.05.2010 17:20
TarasBer   Ага... Особенно - судя вот по этой части первого ...   12.05.2010 10:36
ninja   В 1м посте я писал программу на консольном С++. а ...   11.05.2010 18:31
volvo   Ты для себя сначала реши, ты хочешь С или С++? Пот...   11.05.2010 23:58
volvo   [color=gray]"- Осетрину прислали второй свеж...   13.05.2010 11:56
ninja   Программа вроде работает, я просто путаюсь с С и С...   17.05.2010 19:44


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 11:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"