powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка по алфавиту
15 сообщений из 65, страница 3 из 3
Сортировка по алфавиту
    #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
15 сообщений из 65, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка по алфавиту
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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