powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка по алфавиту
65 сообщений из 65, показаны все 3 страниц
Сортировка по алфавиту
    #39971270
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!!! Помогите пожалуйста написать функцию сортировки по заданию: Написать программу с функцией, которая в текстовом файле "Test.txt" сортирует слова в лексикографическом порядке (по алфавиту).
Код: plaintext
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.
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <string>
#include <cstring>
using namespace std;
int main()
{
    setlocale(LC_ALL,"rus");
    const int len_text = 500;
    const int len_word = 50;
    char buffer[len_text], word[len_word];
    ifstream fin("test.txt");
    if(!fin)
    {
        cout << "Ошибка открытия файла " << endl;
    }
    fin.getline(buffer,len_text ,EOF);
    for(int i = 0; i < strlen(buffer); i++)
    cout << buffer[i];
    cout << endl;
    cout <<"Результат после сортировки: " << endl;
    system("pause");
    return 0;
}
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971271
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
std::sort()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971273
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понимаю. Я посмотрел темы автора https://www.sql.ru/forum/actualsearch.aspx?a=Gomn&ma=0

Два года назад он спрашивал Сортировку Шелла с параллелизмом. и вроде даже решил.
За два года нулячий программист становится почти мидлом и уже не задаёт таких детских вопросов.

Я даже не знаю что сказать. Дать готовое коробочное решение человеку которые не учится и не накапливает опыт?

Может он вообще не программист а просто посредник который зарабатывает репостами?

Нет возможно я предвзят... Возможно я неправ! Разубедите меня.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971280
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Может он вообще не программист а просто посредник который зарабатывает репостами?

Это как пардон?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я боюсь развивать мысль. Я бы хотел чтоб автор ответил.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971289
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я программист,только я специлизируюсь а 1С, а не на с++, я учусь на 4 курсе и работаю еще, это сложно сразу знать 5 языков одновременно в универе
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971293
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomnэто сложно сразу знать 5 языков одновременно в универе

Вообще-то как раз в университете это несложно. Там моск ещё полупустой и впитывает всё, до
чего можешь дотянуться. Тем более, что пять директивных языков это минимальные отличия в
синтаксисе базовых операторов. Вот если бы Пролог с Лиспом каким-нибудь учить приходилось,
там да, пришлось бы втыкать некоторое время в логику.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971294
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и пролог есть
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971295
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomn
я программист,только я специлизируюсь а 1С, а не на с++, я учусь на 4 курсе и работаю еще, это сложно сразу знать 5 языков одновременно в универе

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

Постарайся не забывать эти знания и записывай их как-то. Или зучивай наизусть. Сортировку Шелла ты уже знаешь.
Я так считаю. Иначе наши ответы к тебе будут лишены мотивации.

Согласен?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971296
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, спасибо
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971301
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomn
я программист,только я специлизируюсь а 1С, а не на с++, я учусь на 4 курсе и работаю еще, это сложно сразу знать 5 языков одновременно в универе
Сложно??? Пять языков это сложно???
Мельчают люди...
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971306
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полиглоты (я имею в виду в гуманитарном смысле этого слова а не в техническом)
говорят что первые 3-5 языков тяжело заходят. А потом... как по маслу.
Можно хоть каждый месяц по новому языку докидывтаь.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971309
xerxf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

не знаю как в гуманитарном смысле, а в техническом с Visual Basic на assembler всё же переклчаться тяжеловато :-)
А если автор студент -так ему наверное нужно ручками отсортировать, а не волшебную функцию вызвать.
Кстати, Gomn - а к чему вы привели какой то код ? Какое отошение он имеет к вашей задаче?
ну и cout << "Ошибка открытия файла " << endl; и продолжить дальше выполнение как ни в чём не бывало - как то это не айс
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971310
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нечего автора жалеть. Если чел уже работает с 1С - значит зарабатывает деньги.
Если зарабатывает - значит в состоянии оплатить репетитора. Я так рассуждаю.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971314
xerxf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

ну да. тут можно только процитировать верхнюю тему из работы
"P.S. Если вы учитесь в учебном заведении, вас же никто туда насильно не затаскивал. Вы платите за получение знаний или даже получаете стипендию от государства, так получайте же эти знания, иначе зачем учиться на такой специальности. Можно податься в строители, слесари, швеи, водители. Там никто программирование учить не заставляет. А если пришли учиться именно на такую специальность – будьте любезны соответствовать. Специалисты знают то что они знают потому, что хотели получить эти знания и мы все будем очень сильно расстроены, если из-за тех, кто не хочет учиться сейчас, мы получим в будущем очередной Чернобыль, СШГЭС, падение самолетов и т.п."

А по задаче - тут как бы или гуглится за минуту (это если нужна функция) или пишется простейший пузырёк. ну это если не придираться. А то при желание то задачу можно развернуть на кучу условий - типа файл огромный, в памяти не уместится, скорость сортировки критична... но что то мне подсказывает, что это не тот случай. А если человек работает программистом, то написание пузырька не должно составлять сложности на любом языке. уж по крайне мере не настолько плюсы отичатся от того, на чём пишут 1С ники, чтоб сортировка писалась принципиально по другому.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971353
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что количество листьев префиксного дерева не равно количеству слов.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971354
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я думаю что количество листьев префиксного дерева не равно количеству слов.

Меня удивляет этот форум. В любой теме профи вместо того, что бы помочь автору, начинают решать какие-то свои творческо-исследовательские вопросы, хотя там работы минут на 30 (это если самому сортировку реализовывать). Но автору топика не помогают. И вот он читает такое и что он думает?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971359
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

Помоги автору. Помоги ему так чтоб ты сам его нанял к себе на работу.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971393
xerxf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav,

почему автору не помогают - очень доступно написано в теме https://www.sql.ru/forum/941371/studentam-zhelaushhim-pomoshhi

И тема - не просьба о помощи. А просьба сделать за автора задание. Судя по приведённому фрагменту кода - при полном отсутствие у него знаний по теме
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971397
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет хешей - я все поудалял.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971424
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxf
petrav,
почему автору не помогают - очень доступно написано в теме...
Наверное потому, что он, как минимум, ошибся форумом. Форум, где "решить за деньги" здесь .
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971482
White Owl
Gomn
я программист,только я специлизируюсь а 1С, а не на с++, я учусь на 4 курсе и работаю еще, это сложно сразу знать 5 языков одновременно в универе
Сложно??? Пять языков это сложно???
Мельчают люди...

да это каша в голове будет. нафиг не нужно.
лучше знать 1-2, но до мелочей.
xerxf
А то при желание то задачу можно развернуть на кучу условий - типа файл огромный, в памяти не уместится, скорость сортировки критична... но что то мне подсказывает, что это не тот случай.

а вот отсюда как раз самолёты то и падают, если такое НЕ требовать.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971543
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
White Owl
пропущено...
Сложно??? Пять языков это сложно???
Мельчают люди...

да это каша в голове будет. нафиг не нужно.
лучше знать 1-2, но до мелочей.
Абсолютная глупость. Каша в голове это как раз с одного - двух языков. Причем волшебная каша; каждое действие компьютера это что-то чрезвычайно загадочное и непознаваемое.
А имя опыт как минимум десятка языков начинает появляться понимание что из чего вырастает, волшебность исчезает и появляется понимание. А после третьего десятка уже становится совершенно неважно на каком языке пишешь. Просто берешь и пишешь, даже если ни разу учебника по этому конкретному языку не открывал.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971597
чтобы понимать, что и как работает, достаточно на пальцах объяснить, что работа программиста - это перекладывание данных из одной ячейки памяти в другую.
Что переменная - это просто ячейка памяти. Что функция - это основная рабочая лошадка и выполнять она должна одну задачу. Что в основе всего - обычный true/false.
И т.п. примитивы. Конечно удобнее всего это делать на C/C++
Глупость - в преподавателях
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971604
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ф-я на С !
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#include <stdio.h>
#include <string.h>

char (*sort_words(char (*words)[80], int size ))[80] {
	int i;
	int n = size;
	char temp[80];
	short int sorted = 1;
	while(sorted) {
		sorted = 0;
		for (i=0; i<n-1; i++) {
			if ( strcmp(words[i], words[i+1]) > 0 ) {
				sorted++;
				strcpy(temp, words[i]);
				strcpy(words[i], words[i+1]);
				strcpy(words[i+1], temp);
			}
		}
	}
	return words;
}


...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971668
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab, ты забыла упомянуть, что для чувствительности функций строк к национальной сортировки, эту самую локаль необходимо настроить, иначе алгоритм годится только для case sensitive сортировки по однобайтой кодировке, в которой буквы уже упорядочены, типа cp1251 русская. При попытке использовать ту же кодировку, но с украинской сортировкой, или же case insensitive сортировку, результат будет некорректен.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971673
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обсуждение любой сортировки рано или поздно приходит к Collation Rules и национальным кодировкам.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971690
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, а в конечном итоге, к использованию таких спецификаций как UCA (Unicode Collation Algorithm) и библиотек типа icu-project , позволяющих получить по строке ключ сортировки, исходя из настроек сортировки.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971806
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с locale
Код: plaintext
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.
#include <stdio.h>
#include <string.h>
#include <locale.h>

char (*sort_words(char (*words)[80], int size, char *locale ))[80] {
	int i;
	int n = size;
	char temp[80];
	short int sorted = 1;

	setlocale(LC_COLLATE, locale);

	while(sorted) {
		sorted = 0;
		for (i=0; i<n-1; i++) {
			if ( strcoll(words[i], words[i+1]) > 0 ) {
				sorted = 1;
				strcpy(temp, words[i]);
				strcpy(words[i], words[i+1]);
				strcpy(words[i+1], temp);
			}
		}
	}
	return words;
}


...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971864
сабстринги и регекспы - не работают в кириллических строках, если это не wstring.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971869
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab, это вариант с 1 locale? А если локали две?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971894
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

в данном случае в локале нас интересуте только параметр collation, т.е. я не думаю, что это создаст проблему

код и результаты для en_US.UTF-8
Код: sql
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.
#include <stdio.h>
#include <string.h>
#include <locale.h>

char (*sort_words(char (*words)[80], int size, char *locale ))[80] {
	int i;
	int n = size;
	char temp[80];
	short int sorted = 1;

	setlocale(LC_COLLATE, locale);

	while(sorted) {
		sorted = 0;
		for (i=0; i<n-1; i++) {
			if ( strcoll(words[i], words[i+1]) > 0 ) {
				sorted = 1;
				strcpy(temp, words[i]);
				strcpy(words[i], words[i+1]);
				strcpy(words[i+1], temp);
			}
		}
	}
	return words;
}

int main(void) {
	char test[10][80] = {
			"Apple", "Mango",
			"Яблоко", "Слива", "Груша", "арбуз", "Лимон",
			"Cherry", "blueberry", "Strawberry"
	};
	int n = 10;
	char locale[] = "en_US.UTF-8";
	//char locale[] = "C"

	char (*ptr)[80];

	ptr = sort_words(test, n, locale);

	for (int i=0; i<n; i++) {
		printf("%s\n", ptr[i]);
	}
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Apple
blueberry
Cherry
Mango
Strawberry
арбуз
Груша
Лимон
Слива
Яблоко
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971900
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,
сабстринги и регекспы - это уже другая тема, я еще пока не умею в С регекспы делать
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971905
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
сабстринги и регекспы - не работают в кириллических строках, если это не wstring.
Шо вообще? Как же так? Как же мы живем?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971908
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя. Придется переходить на латиницу.

Budem pisat kak Polyaki.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971915
White Owl
Алексей Роза
сабстринги и регекспы - не работают в кириллических строках, если это не wstring.
Шо вообще? Как же так? Как же мы живем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    setlocale(LC_ALL, "ru_RU.utf8");

    string str = "техническая строка для тестов"; // 26 символов + 3 пробела
    cout << str.length() << endl; // 55 (52 + 3)
    cout << sizeof(str) << endl; // 32
    cout << str.find("для") << endl; // 36 (упс. wstring покажет 20)

    cout << str.substr(36, 3) << endl; // д&#65533;

    str.replace(str.find("для"), 3, "не для"); // техническая строка не для&#65533;я тестов
    cout << str << endl;
// ну технически то воткнул в правильное место, хотя насчитал позицию 36, но воткнул таки с кракозяброй
// (этот знак вопроса в ромбе означает "половину символа", т.е. 1 байт вместо двух)


нах так жЫть?!
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971920
пардон, wstring покажет 19
и есессно всё корректно отображает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    wstring str = L"техническая строка для тестов"; // 26 символов + 3 пробела
    wcout << str.length() << endl; // 29
    wcout << str.find(L"для") << endl; // 19

    wcout << str.substr(str.find(L"для"), 3) << endl;

    str.replace(str.find(L"для"), 3, L"не для");
    wcout << str << endl;
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971925
mayton, обнаружен баг:
эта кнопка "Изменить" пропадает через некоторое время
и это ок.
Но почему она не пропадает, когда по ней жмёшь и получаешь "Извините, у вас нет прав редактировать данное сообщение."
надо либо убирать её совсем, раз время вышло, либо добавить время.
(или оно обламывает после 5 редактирований - хз)
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971932
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,

Код: plaintext
1.
  setlocale(LC_ALL, "ru_RU.utf8");



некомильфо!
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971934
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
mayton, обнаружен баг:
эта кнопка "Изменить" пропадает через некоторое время
и это ок.
Но почему она не пропадает, когда по ней жмёшь и получаешь "Извините, у вас нет прав редактировать данное сообщение."
надо либо убирать её совсем, раз время вышло, либо добавить время.
(или оно обламывает после 5 редактирований - хз)

Это не ко мне вопрос. Это в обуждение нашего сайта.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971948
mini.weblab
Алексей Роза,

Код: plaintext
1.
  setlocale(LC_ALL, "ru_RU.utf8");




некомильфо!

чёйто?
wstring с LC_COLLATE вообще кириллицу НЕ показывает.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971949
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Алексей Роза,
сабстринги и регекспы - это уже другая тема, я еще пока не умею в С регекспы делать

И лучше не делай. С++ это тебе не Перл.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971969
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,
потому что для функции, отвечающей за сортировку важен только порядок букв, поэтому мы ей даем доступ только к LC_COLLATE.
с какого перепугу ей вдруг менять всю локаль?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971982
с этого перепугу:
Алексей Роза
wstring с LC_COLLATE вообще кириллицу НЕ показывает.

и зачем вообще программе кусок локали? остальное что, солить?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39971999
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как нам вот это отсортировать?

Лёва Толстый - Война и Мир -- Еh bien, mon prince. Gênes et Lucques ne sont plus que des apanages,
des поместья, de la famille Buonaparte. Non, je vous préviens, que si vous
ne me dites pas, que nous avons la guerre, si vous vous permettez encore de
pallier toutes les infamies, toutes les atrocités de cet Antichrist (ma
parole, j'y crois) -- je ne vous connais plus, vous n'êtes plus mon ami,
vous n'êtes plus мой верный раб, comme vous dites. [1] Ну,
здравствуйте, здравствуйте. Je vois que je vous fais peur, [2]
садитесь и рассказывайте.
Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и
приближенная императрицы Марии Феодоровны, встречая важного и чиновного
князя Василия, первого приехавшего на ее вечер. Анна Павловна кашляла
несколько дней, у нее был грипп, как она говорила (грипп был тогда новое
слово, употреблявшееся только редкими). В записочках, разосланных утром с
красным лакеем, было написано без различия во всех:
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972000
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По бинарным кодам. Или "дербанить" текст, размеченный на (естественные) яызки.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972005
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, через получение ключа сортировки из библиотеки icu при настройках language insensitive + case insensitive + accent insensitive.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972036
mayton
А как нам вот это отсортировать?

по индексу очевидно.
иначе что вы там вообще сортировать собрались? рандомный текст?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972538
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    setlocale(LC_ALL, "ru_RU.utf8");

    string str = "техническая строка для тестов"; // 26 символов + 3 пробела
    cout << str.length() << endl; // 55 (52 + 3)
    cout << sizeof(str) << endl; // 32
    cout << str.find("для") << endl; // 36 (упс. wstring покажет 20)

    cout << str.substr(36, 3) << endl; // д&#65533;

    str.replace(str.find("для"), 3, "не для"); // техническая строка не для&#65533;я тестов
    cout << str << endl;
// ну технически то воткнул в правильное место, хотя насчитал позицию 36, но воткнул таки с кракозяброй
// (этот знак вопроса в ромбе означает "половину символа", т.е. 1 байт вместо двух)



а я знаю, почему это так ! :-)
это потому, что размер char 1 байт, а размер UTF-8 символа может занимать от 1 до 4 байтов, и он полностью в char не помещается.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972544
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabэто потому, что размер char 1 байт

Нет, это потому что кто-то загнал в код забавного бага, воткнув в replace константу 3
вместо strlen("для").
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972559
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
а есть кодировка, где русские буквы входят в первые 128 символов?

(я думала, что string состоит из char, а wstring из wchar_t)
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972576
mini.weblab
а есть кодировка, где русские буквы входят в первые 128 символов?

первые 128 жёстко зашиты в ASCii
всё остальное уже с вариантами
всякие там CP* и Koi-* - держат в следующих 128
utf - целый мир
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972581
mini.weblab
(я думала, что string состоит из char, а wstring из wchar_t)

так и есть
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972603
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня появилась идея по поводу сортировки (я пока ограничусь ASCII и английским языком)
с использованием сортированного Linked List

бонус: неограниченный ввод данных, ограниченный размер памяти

sorted linked list
Код: plaintext
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.
63.
64.
65.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Node of linked list
struct node
{
	char data[100];
	int counter;
	struct node *next;
};

// Inserting a new node
struct node *insert_sort(struct node *start, char *data, short *op_status) {
	int test = 0;
	struct node *new_node, *ptr, *preptr;
	ptr = start;
	preptr = NULL;

	*op_status = 0;

	// create new node
	new_node = (struct node *)malloc(sizeof(struct node));
	strcpy(new_node->data, data);
	new_node->counter = 1;

	// The list is empty
	if (start==NULL) {
		new_node->next = NULL;
		start = new_node;

		*op_status = 1;
		return start;
	}

	// Non empty list
	while(ptr != NULL) {
		test = strcoll(ptr->data, new_node->data);
		// Node already exists
		if (test == 0) {
			ptr->counter += 1;
			free(new_node);

			*op_status = 0;
			return start;
		}

		if (test > 0)
			break;
		preptr = ptr;
		ptr = ptr->next;
	}

	if (preptr == NULL) {
		new_node->next = ptr;
		start = new_node;
	}
	else {
		preptr->next = new_node;
		new_node->next = ptr;
	}

	*op_status = 1; // new node inserted
	return start;
}

...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972625
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
а есть кодировка, где русские буквы входят в первые 128 символов?
ДКОИ, если не путаю тип этой кодировки. Но, вроде, в ДКОИ-7 часть русского алфавита занимала позиции латинских букв по фонетическому созвучию.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39972626
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
всякие там CP* и Koi-* - держат в следующих 128
CP65001 - юникод в UTF8. Коды от 128 до 255 - вообще не используются.
Поддержка в (виндовой) консоли несколько страдает, но не исключено, что "новая консоль десятки" это выправила.
Это даже если забыть про другие многобайтовые кодировки в кодовых страницах "азиатов".
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973590
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я записал код вот так: только сортировка неправильно работает
Код: plaintext
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.
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <string>
#include <cstring>
using namespace std;
void sort_words(char** strlist, int n)
{
	for(int i = 0; i < n - 1; i++)
		for(int j = i + 1; j < n; j++)
			if(strcmp(strlist[i], strlist[j]) > 0) {
				char* tmp = strlist[i];
				strlist[i] = strlist[j];
				strlist[j] = tmp;
			}
}
int main()
{
	setlocale(LC_ALL,"rus");
	int n; 
	char** strlist;
	const int len_text = 500;
	const int len_word = 50;
	char buffer[len_text], word[len_word];
    ifstream fin("test.txt");
    if(!fin)
    {
        cout << "Ошибка открытия файла " << endl;
    }
	fin.getline(buffer,len_text,EOF);
    for(int i = 0; i < strlen(buffer); i++)
    cout << buffer[i];
	cout << endl;
	fin.close();
    cout <<"Результат после сортировки: " << endl;
	sort_words(strlist,n);
	system("pause");
	return 0;
}

в чем моя ошибка?
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973595
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomnв чем моя ошибка?

1. Забыл заполнить strlist.
2. Забыл его вывести на экран после сортировки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973612
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с функцией sort_words все в порядке, проблемы в main (см. пост DS)

тест
Код: plaintext
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.
#include <stdio.h>
#include <string.h>

void print_list(char **strlist, int n) {
	for (int i=0; i<n; i++) {
		printf("%s\n", strlist[i]);
	}
}

void sort_words(char** strlist, int n)
{
	for(int i = 0; i < n - 1; i++)
		for(int j = i + 1; j < n; j++)
			if(strcmp(strlist[i], strlist[j]) > 0) {
				char* tmp = strlist[i];
				strlist[i] = strlist[j];
				strlist[j] = tmp;
			}
}

int main() {
	char *data[] = {
			"Strawberry",
			"Cherry",
			"Apple",
			"Orange",
			"Lemon"
	};
	printf("\nInput data:\n");
	print_list(data, 5);

	sort_words(data, 5);
	printf("\nSorted data:\n");
	print_list(data,5);

}



еще нужно выйти из функции если файл не прочитался

Код: plaintext
1.
2.
3.
4.
5.
    if(!fin)
    {
        cout << "Ошибка открытия файла " << endl;
        return 1;
    }
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не самый эффективный алгоритм. По виду похож на сортировку методом прямого выбора.
Квадратичный. Причем операция сравнения стоит под квадратом. А она у нас недешевая.

Код: plaintext
1.
void sort_words(char** strlist, int n) .......



Вообще все современные алгоритмы сортировок - это генерики или шаблоны.
В них вы вставляете компаратор как обойму в пистолет. И они всегда работают
быстрее и эффективнее чем ваши самодельные. В данном случае компаратор
это strcmp.

И среди генериков по умолчанию сортировка Хоара предлагается как универсальный вариант
без квадратичной сложности под капотом.
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973652
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично от меня плюс ТСу за использование массив указателей !
:-)
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973665
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab, благодарю за помощь, но мне надо вывести эти слова из текстового файла на консоль и потом сортировать, а не просто указать в коде
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973668
сделай |sort
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973675
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomn
mini.weblab, благодарю за помощь, но мне надо вывести эти слова из текстового файла на консоль и потом сортировать, а не просто указать в коде


неправильно понимаете задачу.
1) вам нужно считать данные из файла в память компьютера
2) передать их функции sort_words для сортировки
3) вывести полученные результаты на консоль

кстати, а откуда слова читать будем, из Войны и мира? :-)
...
Рейтинг: 0 / 0
Сортировка по алфавиту
    #39973677
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab, спасибо за то, что объяснили задание
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка по алфавиту
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]