Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
1

Сортировать любой текст по алфавиту, а у меня сортирует только строку

06.11.2016, 18:27. Показов 1446. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите!!! нужно что бы он сортировал весь текст, а у тут сортирует строку по строчно слова
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
56
57
58
59
60
61
62
#include "stdafx.h"ку
#include<iostream>
#include<fstream> 
#include <clocale>
using namespace std;
 
 
void sort(char**, int n);
 
int main()
{
    int n = 10;
    setlocale(LC_ALL, "Russian");
    ifstream ff("d:\\ddd\\input.txt"); // укажите полный путь к файлу
    if (ff)
    {
        char** s = new char*[n];
        for (int i = 0; i<n; i++)
            s[i] = new char[100];
 
        int j = 0;
        while (j<n && ff.getline(s[j], 100)) // каждый предмет в отдельной строке файла
            j++;
 
        cout << "До сортировки:" << endl;
        for (int i = 0; i<n; i++)
            cout << s[i] << endl;
 
        sort(s, n);
 
        cout << endl << "После сортировки:" << endl;
        for (int i = 0; i<n; i++)
            cout << s[i] << endl;
 
        for (int i = 0; i<n; i++)
            delete[] s[i];
        delete[] s;
    }
    else
        cout << "файл не открылся";
    system("pause");
    return 0;
}
void sort(char **s, int n)
{
    int k = 0;
    for (int i = 0; i<n - 1; i++)
        for (int j = i + 1; j<n; j++)
        {
            k = 0;
            if (s[i] != s[j]) {
                while (s[i][k] == s[j][k]) k++;
                if (s[i][k]>s[j][k])
                {
                    char *s2 = s[i];
                    s[i] = s[j];
                    s[j] = s2;
 
                }
            }
        }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2016, 18:27
Ответы с готовыми решениями:

Сортировать строку по алфавиту
всем привет,Помогите, написал программу чтобы сортировать строку по алфавиту. Как можно переделать,...

Переписать из файла ф1 текст в файл ф2 и сортировать по алфавиту
переписать из файла ф1 текст в файл ф2 и сортировать по алфавиту#include &lt;stdio.h&gt; #include...

Задан текст из 20 символов латинского алфавита. Сортировать по алфавиту. VBA
Просто выводит в label из textbox. помогите пожалуйста сортировать(пузырьком не получается). Нужно...

Написать программу которая сортирует по алфавиту слова
С помощью string

32
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 18:44 2
Я так понял, в файле input.txt содержимое? Скинь его сюда, только МАЛЕНЬКИЙ ВАРИАНТ. Маленький, это значит, если он не сортируется, будучи размером как в 2, так и в 1 килобайт, то скидывать нужно файл весом 1 килобайт.
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 18:45  [ТС] 3
https://www.cyberforum.ru/atta... 1478447114
Вложения
Тип файла: txt input.txt (73 байт, 6 просмотров)
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 18:46  [ТС] 4
не тот
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 18:47 5
давай тот
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 18:48  [ТС] 6
Был Серёжа именинник, и много ему разных подарили подарков: и волчки, и кони, и картинки. Но дороже всех подарков подарил дядя Серёже сетку, чтобы птиц ловить.
*Вот допустим текст

Добавлено через 40 секунд
мне надо что бы он любой текст сортировал
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.11.2016, 19:00 7
Вообще не понял строки 52 и 53.
Напомню Вам что k - это столбец, а i и j - это строки(а Вы думали по-другому?).
Строка 52:
C++
1
while (s[i][k] == s[j][k]) k++;
- Это что, если символы в строках равны, ищет первый отличный символ?
Строка 53:
C++
1
if(s[i][k]>s[j][k])
- зачем сравнивать 2 символа в одном столбце и в разных строках?
И еще вопрос, что Вам нужно отсортировать, чтобы каждый символ всего текста был по возрастанию?
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 19:02  [ТС] 8
нужно сортировать текст по алфавиту
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 19:09 9
idris97, смотри

C++
1
2
        while (j<n && ff.getline(s[j], 100)) 
            j++;
Я так понял, в этом отрывке ты хочешь считать 10 первых слов куда-нибудь, а потом их отсортировать. Так вот, так слова НЕ СЧИТЫВАЮТ. Первая итерация даст тебе в s[0] строку из 100 символов:

"Был Серёжа именинник, и много ему разных подарили подарков: и волчки, и кони, и картинки. Но дороже "
(тут 100 символов если чё)

То есть именно вся эта строка будет в s [0], тебе же не это нужно?

Я так понимаю, тебе нужно так:

s[0]= "Был"
s[1]= "Серёжа"
s[2]= "именинник"
s[3]= "и"
s[4]= "много"
s[5]= "ему"
s[6]= "разных"
s[7]= "подарили"
s[8]= "подарков:"
s[9]= "и"

Прав ли я? И если да, то считывай пословно, а не как ты, куски по 100 символов.
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 19:14  [ТС] 10
kravam, а как мне считать по словно в строке? я вот это не могу понять что бы он считал по словно
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.11.2016, 19:18 11
В первом файле в каждой строке было одно слово, так что тут вопрос в организации файла. Как Вы вообще хотите отсортировать? По первой букве по возрастанию, при этом сами слова не меняются внутри себя?
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 19:20  [ТС] 12
слова текста хочу отсортировать по первой букве по алфавиту
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 19:21 13
Цитата Сообщение от idris97 Посмотреть сообщение
kravam, а как мне считать по словно в строке? я вот это не могу понять что бы он считал по словно
Теорию нужно какую-никакую почитать. Учебники.

Во-первых, то. что делаешь ты, описано здесь:
http://www.cplusplus.com/refer... m/getline/

Так, а тебе нужно считать допустим, первые 10 слов. Для простоты условимся, что файл заведомо больше 10 слов. Также УСЛОВИМСЯ, что каждое слово не больше ста символов длиной. Тогда вместо твоего цикла пишем так:

C++
1
2
3
4
5
6
7
8
9
10
        string temp;
        //В этом цикле будем сыитывать 10 слов
        for (int i = 0; i < 10; i++)
        { 
            //считываем каждое слово во врменеую строку
            ff >> temp;
            
            //копируем считаную строку, состоящую из одного слова в массив s[i]
            strcpy (s[i], temp.c_str());
        }
потом сортируй как тебе нужно.
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 19:30  [ТС] 14
kravam, мне вот это заменить?
C++
1
2
3
int j = 0;
        while (j<n && ff.getline(s[j], 100)) // каждый предмет в отдельной строке файла
            j++;
на это?
C++
1
2
3
4
5
6
7
8
9
10
string temp;
        //В этом цикле будем сыитывать 10 слов
        for (int i = 0; i < 10; i++)
        { 
            //считываем каждое слово во врменеую строку
            ff >> temp;
            
            //копируем считаную строку, состоящую из одного слова в массив s[i]
            strcpy (s[i], temp.c_str());
        }
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 19:33 15
Цитата Сообщение от idris97 Посмотреть сообщение
kravam, мне вот это заменить?
да, это
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 19:35  [ТС] 16
Цитата Сообщение от idris97 Посмотреть сообщение
ff >> temp;
тут предупреждает
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 19:39 17
Цитата Сообщение от idris97 Посмотреть сообщение
тут предупреждает
о чём?
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.11.2016, 19:39 18
Из той ссылки. что Вы дали:
C++
1
istream& getline(char* s, streamsize n, char delim);
- может delimeter просто заменить на пробел и считаются слова?
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
06.11.2016, 19:42  [ТС] 19
Цитата Сообщение от idris97 Посмотреть сообщение
ff >> temp;
тут предупреждает

kravam, отсутствует оператор ">>", соответствующий этим операндам
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
06.11.2016, 19:46 20
Цитата Сообщение от DemolitionMan Посмотреть сообщение
- может delimeter просто заменить на пробел и считаются слова?
ну так-то да, меня в своё время не научили
Файловый поток вместо одного слова считывает два, почему?

Цитата Сообщение от idris97 Посмотреть сообщение
kravam, отсутствует оператор ">>", соответствующий этим операндам
тогда считывай, как говорит DemolitionMan. А вообще странно это, ничего нигде отсутствовать не должно.
0
06.11.2016, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2016, 19:46
Помогаю со студенческими работами здесь

Распечатайте все отчества по алфавиту, а также текст, содержащий строки, состоящий только из фамилий и имён
Пусть текст представляет собой последовательность строк. На каждой строке находится имя, фамилия и...

Ввести строку, состоящую только из букв, и определить, являются ли буквы в строке упорядоченными по алфавиту
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; int main() { char str; int i;...

Ввести строку, состоящую только из букв, и определить, являются ли буквы в строке упорядоченными по алфавиту
Ввести строку, состоящую только из букв, и определить, являются ли буквы в строке упорядоченными по...

Как сделать чтоб rtf-файл открывался с рисунками, у меня только текст открывается
Как сделать чтоб rtf-файл открывался с рисунками, у меня только текст открывается... Я использовал...

Разработайте универсальную подпрограмму, которая сортирует слова строки по алфавиту
Разработайте универсальную подпрограмму, которая сортирует слова строки по алфавиту. Слова в строке...

Сортировать структуру по алфавиту
Ниже вы можете лицезреть готовую программу, которая принимает от пользователя ФИО, курс, оценки,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru