0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
1

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

09.10.2012, 22:31. Показов 3152. Ответов 22
Метки нет (Все метки)

Уважаемые программисты, помогите пожалуйста девушке. Есть задание, но как-то я давно не садилась за код и не очень помню, ка к правильно делать его и по правильной ли хотя бы общей схеме я иду.

Задание:

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

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


С Уважением!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2012, 22:31
Ответы с готовыми решениями:

Написать программу, сортирующую по алфавиту строку латинских букв
Помогите 3. Написать программу, сортирующую по алфавиту строку латинских букв.

Необходимо написать программу, выводящую все множества чисел из массива
Пример: Массив: {1,10,2} Вывод: 1 2 10 1,2 1,10 ...

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

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

22
5489 / 4884 / 831
Регистрация: 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;
}
Насчёт кодировки, ничего не могу сказать.
Миниатюры
Необходимо написать программу сортирующую эту строки по алфавиту и выводящую результат в другой файл.  
1
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 00:18  [ТС] 3
Да,ч то-то типа этого. Вот только вообще мозг отключается. Могу открыть файл а дальше ступор. Не помню какие команды использовать правильнее... И сортировку методом пузырька делается же?
0
5489 / 4884 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 00:32 4
Цитата Сообщение от Codigopensador Посмотреть сообщение
И сортировку методом пузырька делается же?
Понятия не имею, как реализован sort().
0
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 минуту
Открываю файл, в нем уже есть массив данных. Мне их как понимаю надо построчно скопировать, сравнить все строки между собой, отсортировать и вывести в другом файле. Но чего-то как-то мозг кипит а работа стоит((
0
5489 / 4884 / 831
Регистрация: 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]="";
И цикл нужно организовать, чтобы все строки из файла считать, а не одну.
0
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 стакана)....
Или я что-то не так пишу?
0
5489 / 4884 / 831
Регистрация: 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);
}
0
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);
Вот написала все, скажите правильно ли или нет или есть недочеты и ошибки?
0
5489 / 4884 / 831
Регистрация: 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 минуты
В целом код не рабочий.
0
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 строки чаровским или стринг?
0
5489 / 4884 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 12:28 12
Цитата Сообщение от Codigopensador Посмотреть сообщение
считывание строк в массив strfile
Сюда вы можете записать только одну строку:
C++
1
char srtfile[255];
И ошибки исправьте.
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 12
10.10.2012, 12:33  [ТС] 13
А как тогда мне считать строки из файла в отдельный массив и уже там все отсортировать?
0
5489 / 4884 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 12:41 14
Создайте массив string. Может так и до vector<string> дойдём, как в моём коде? Код мой (во 2 посте) смотрели?
0
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не изучала в колледже и не совсем мне ваш код в некоторых места понятен.
0
5489 / 4884 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 12:52 16
Давайте по порядку, а то запутаемся. vector - это тот же массив, только с автоматическим управлением памятью. Это к чему?
string s[255];
if (fp!='\n')
fputs(s,sizeof(s),fp);
Разберитесь сначала с записью в массив из файла.
0
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);
}
0
5489 / 4884 / 831
Регистрация: 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);
0
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];
    }
    }
0
5489 / 4884 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 14:07 20
Цитата Сообщение от Codigopensador Посмотреть сообщение
И вот в задании сказанно про кодировку KOI-8R стоит ли на ней заострять внимание, или никаких проблем это не должно вызывать в сортировке и отображении?
При сортировке не должно, про остальное уже писал: не знаю. С методом сортировки сами разбирайтесь, но в предложенном коде - ошибки. И проясните для себя, что с чем сравниваете.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2012, 14:07
Помогаю со студенческими работами здесь

Написать программу, сортирующую символы
решите задачу плз Написать программу, сортирующую символы, введенной с клавиатуры строки в порядке...

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

Написать программу, сортирующую массив по убыванию
Дан массив A размерностью N (размерность вводит пользователь). Массив заполнен случайными числами...

Убрать из файла цифры, переформатировать и пронумеровать строки, записать результат в другой файл
Разработать программу, которая: а) создает текстовый файл TF8_1 с символьных строк различной длины;...

Вставить в начало каждой строки файла ее номер и записать результат в другой файл
Всем привет=) Помогите решить задачку.....=( Дан текстовый файл, содержащий строки. Вставить в...

Написать программу, сортирующую список фамилий студентов в группе.
1)Дано слово из четного числа букв. Поменять местами первую букву со второй, третью – с четвертой и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru