Форум программистов, компьютерный форум CyberForum.ru

Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
09.10.2012, 22:31     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #1
Уважаемые программисты, помогите пожалуйста девушке. Есть задание, но как-то я давно не садилась за код и не очень помню, ка к правильно делать его и по правильной ли хотя бы общей схеме я иду.

Задание:

Существует файл со строками в кодировке koi8-r.Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл.

1) Вопрос стоит ли на данную кодировку обращать внимание или она с АСКи схожа и все окей?
2)Считывать нужно построчно файл или посимвольно в массив?


С Уважением!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 22:31     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл.
Посмотрите здесь:

C++ Написать программу, выводящую на экран строки, которые одновременно содержатся в двух заданных текстовых файлах
Написать программу, сортирующую список фамилий студентов в группе. C++
Написать программу, которая считывает текст из файла и записывает в другой файл C++
помогите написать программу, копирующую один файл в другой. Имена файлов программа должна получать из командной строки. C++
Необходимо составить программу, выводящую на экран матрицу данного вида (подробнее внутри) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.10.2012, 23:40     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #2
Не совсем понятно, что имеется ввиду под сортировкой строк. Если сортировать по алфавиту, по перым буквам в строках, то считать построчно в какой-нибудь vector<string> и отсортировать стандартным алгоритмом.

Добавлено через 34 минуты
Что-то такое:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm> // для sort() 
using namespace std;
 
int main()
{
setlocale(0, "");
 
fstream f("no_sort.txt");
 
vector <string> vec; //вектор для строк
 
while (!f.eof()) //чтение из файла в вектор
{
    string temp;
    getline(f, temp);
    vec.push_back(temp);
}
 
f.close();
 
for (auto i = vec.begin(); i != vec.end(); i++) //вывод считанного
    cout << *i << endl;
 
sort(vec.begin(), vec.end()); //сортировка строк в векторе
 
cout << endl;
for (auto i = vec.begin(); i != vec.end(); i++) //вывод отсортированного вектора
    cout << *i << endl;
 
f.open("sort.txt", ios::out);
 
for (auto i = vec.begin(); i != vec.end(); i++) //запись отсортированного вектора в файл
    f << *i << endl;
 
f.close();
 
f.open("sort.txt", ios::in);
 
cout << endl;
while (!f.eof()) // вывод из нового файла
{
    string temp;
    getline(f, temp);
    cout << temp << endl;
}
 
f.close();
 
cin.get();
return 0;
}
Насчёт кодировки, ничего не могу сказать.
Миниатюры
Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл.  
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 00:18  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #3
Да,ч то-то типа этого. Вот только вообще мозг отключается. Могу открыть файл а дальше ступор. Не помню какие команды использовать правильнее... И сортировку методом пузырька делается же?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 00:32     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #4
Цитата Сообщение от Codigopensador Посмотреть сообщение
И сортировку методом пузырька делается же?
Понятия не имею, как реализован sort().
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 00:43  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #5
У меня даже без сортировки во втором файле не получается прсото вывести то, что я считала из первого(((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
{ char str_file[]="";
FILE * fp = fopen("1.txt","r");
if(fp != NULL)
fgets(str_file,sizeof(str_file),fp);
else printf("ÍåâîçìîæГ*Г® îòêðûòü ГґГ*éë Г*Г* Г§Г*ГЇГЁГ±Гј.\n");
 
 
 
FILE * fp2 = fopen("2.txt","w");
if(fp2 != NULL) fputs(str_file,fp2);
else printf("ÍåâîçìîæГ*Г® îòêðûòü ГґГ*éë Г*Г* Г§Г*ГЇГЁГ±Гј.\n");
fclose(fp2);
fclose(fp);
Добавлено через 1 минуту
Открываю файл, в нем уже есть массив данных. Мне их как понимаю надо построчно скопировать, сравнить все строки между собой, отсортировать и вывести в другом файле. Но чего-то как-то мозг кипит а работа стоит((
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 01:23     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #6
Цитата Сообщение от Codigopensador Посмотреть сообщение
fgets(str_file,sizeof(str_file),fp);
Тут один символ читаете из файла. Пишите, хотя бы, так:
C++
1
char str_file[255]="";
И цикл нужно организовать, чтобы все строки из файла считать, а не одну.
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 01:42  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char str_file[255]="",s1[255],s2[255];
String s;
int i;
FILE * fp = fopen("1.txt","r");
if(fp != NULL)
for(i=0; i<100; i++)
{
fgets(str_file,sizeof(str_file),fp);
}
else printf("ÍåâîçìîæГ*Г® îòêðûòü ГґГ*éë Г*Г* Г§Г*ГЇГЁГ±Гј.\n");
int str (char s1, char s2);
        {
        int x;
        for(int n=0; s1[n]!='\0' && s2[n]!='\0'; n++)
                {if(s1[n]!=s2[n]) break;
                 if(s1[n]=s2[n]) x=0;
                 if(s1[n]<s2[n]) x=-1;
                 return (x);
                }
         }
А дальше хочу от этого уже отталкиваться. И уже сортировать их методом выборки(3 стакана)....
Или я что-то не так пишу?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 01:47     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #8
String - это что такое? Если строк в файле больше или меньше 100? Нужно читать до конца файла. Например:
C++
1
2
3
4
while (!feof(fp))
{
    fgets(str_file,sizeof(str_file),fp);
}
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 10:56  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
FILE *fp, *fp2;
char srtfile[100];
char x[100];
if((fp=fopen("1.txt","r"))=NULL)
    {
    printf ("Ошибка при открытиии файла");
    }
else 
    {
    while(!feof(fp))
    {
    fgets(strfile,sizeof(strfile),fp);
    }
for(int i=0; i<100; i++)
    {
    if(strfile[i]<strfile[i+1])
    {x=strfile[i];
     strfile[i]=strfile[i+1];
     strfile[i+1]=x;
    }
    }
if((fp2=fopen("2.txt","r"))=NULL)
    {
    printf ("Ошибка при открытиии файла");
    }
else 
{
    while(!feof(fp2))
    {
    fputs(strfile,fp2);
    }
}   
fclose(fp);
fclose(fp2);
Вот написала все, скажите правильно ли или нет или есть недочеты и ошибки?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 11:44     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #10
Внешние ошибки. Во 2 измените на char strfile[255]. В цикле for(), x c индексом должен быть.
C++
1
2
if((fp=fopen("1.txt","r"))==NULL)
if((fp2=fopen("2.txt","w"))==NULL)
При записи в файл уже не нужно ориентироваться на конец файла:
C++
1
fputs(strfile,fp2);
Добавлено через 9 минут
Насчёт остального... Представляете, что ваш код делает? Словами можете описать? Попробуйте коментарии сделать к коду.

Добавлено через 2 минуты
В целом код не рабочий.
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 12:11  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
FILE *fp, *fp2; 
char srtfile[255];
string x;
if((fp=fopen("1.txt","r"))=NULL) \\ открываем файл
    {
    printf ("Ошибка при открытиии файла");
    }
else 
    {
    while(!feof(fp))
    {
    fgets(strfile,sizeof(strfile),fp); \\считывание  строк в массив strfile
    }
for(int i=0; i<100; i++)
    {
    if(strfile[i]<strfile[i+1]) \\ Здесь сортировка идет если строка а меньше строки б строка б становится на место строки а а строка а на местро строки б
    {x=strfile[i];
     strfile[i]=strfile[i+1];
     strfile[i+1]=x;
    }
    }
if((fp2=fopen("2.txt","r"))=NULL) 
    {
    printf ("Ошибка при открытиии файла");
    }
else 
{
    while(!feof(fp2))
    {
    fputs(strfile,fp2); \\ далее это все после перемещения записывается в 2 внешний файл осортированное
    }
}   
fclose(fp);
fclose(fp2);
X каким должен быть все таки если мы сравниваем 2 строки чаровским или стринг?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 12:28     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #12
Цитата Сообщение от Codigopensador Посмотреть сообщение
считывание строк в массив strfile
Сюда вы можете записать только одну строку:
C++
1
char srtfile[255];
И ошибки исправьте.
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 12:33  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #13
А как тогда мне считать строки из файла в отдельный массив и уже там все отсортировать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 12:41     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #14
Создайте массив string. Может так и до vector<string> дойдём, как в моём коде? Код мой (во 2 посте) смотрели?
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 12:46  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #15
получается в моем коде надо
C++
1
2
3
string s[255];
if (fp!='\n')
 fputs(s,sizeof(s),fp);
Но мы тут не используем тогда цикл следовательно не сможем туда записать переменную. Но и перескочить на следующую строку не можем так же.

Я просто vector<string> yне изучала в колледже и не совсем мне ваш код в некоторых места понятен.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 12:52     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #16
Давайте по порядку, а то запутаемся. vector - это тот же массив, только с автоматическим управлением памятью. Это к чему?
string s[255];
if (fp!='\n')
fputs(s,sizeof(s),fp);
Разберитесь сначала с записью в массив из файла.
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 13:07  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #17
Cоздаем массив char string [255]
И как правильно понимаю мне нужно будет работать с указателями на данный массив и создать тогда
C++
1
2
3
4
5
6
char *s[255];
 int n=0;
 while (strfile,sizeof(strfile),fp) 
{ 
    array[n++] = strdup(buffer);
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 13:15     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #18
Давайте лучше так:
C++
1
2
3
4
5
6
7
8
char strfile[100][255]; //массив на 100 строк, по 255 символов в каждой
...
int n = 0;
while(!feof(fp) && n < 100)
{
    fgets(strfile[n], 255, fp);
    n++;
}
И запомнить n - количество считанных строк. Запись в файл, тогда будет такой:
C++
1
2
for (int i = 0; i < n; i++)
     fputs(strfile[i],fp2);
Codigopensador
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 13:56  [ТС]     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #19
Получается что у нас есть массив строк с которым мы теперь можем работать?
И вот теперь возникает 2 вопроса, сортировку стаканом делать же?(пузыриками) или отдельной командой сравнения 2 строк?
И вот в задании сказанно про кодировку KOI-8R стоит ли на ней заострять внимание, или никаких проблем это не должно вызывать в сортировке и отображении?

Добавлено через 11 минут
Вот метод сортировки получается:

C++
1
2
3
4
5
6
7
8
9
10
11
    }
for(int i=0; i<n; i++)
    {   
    for(int j=0; j<255; j++)
    {
    if(strfile[i][j]<strfile[i+1][j])
    {x[j]=strfile[i][j];
     strfile[i][j]=strfile[i+1][j];
     strfile[i+1]=x[j];
    }
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2012, 14:07     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл.
Еще ссылки по теме:

C++ Написать программу: считать две матрицы из файла и записать их в другой файл
Необходимо написать программу, выводящую все множества чисел из массива C++
Написать программу, сортирующую столбцы двумерного массива методом пузырька C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 14:07     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл. #20
Цитата Сообщение от Codigopensador Посмотреть сообщение
И вот в задании сказанно про кодировку KOI-8R стоит ли на ней заострять внимание, или никаких проблем это не должно вызывать в сортировке и отображении?
При сортировке не должно, про остальное уже писал: не знаю. С методом сортировки сами разбирайтесь, но в предложенном коде - ошибки. И проясните для себя, что с чем сравниваете.
Yandex
Объявления
10.10.2012, 14:07     Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл.
Ответ Создать тему
Опции темы

Текущее время: 01:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru