Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2013, 15:20   #1
CppForYou
Пользователь
 
Регистрация: 08.03.2013
Сообщений: 37
По умолчанию сортировка слов

задан текст. выполнить сортировку слов расположив их в порядке увеличения букв. (пример: qqqq ssssssss dfghdfagkhbbgfd kjdfkgkdnlglhmeurtiuerbgn)
CppForYou вне форума Ответить с цитированием
Старый 10.06.2013, 15:25   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Что именно не получается. На сколько я понял сортировка осуществляется у Вас по первой букве. Или я ошибаюсь? Наработки есть?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 12.06.2013, 11:39   #3
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>
#include <ctype.h> 
#define c_swap(c, a, b) c = a, a = b, b = c
char*  s_minlen(char* s, int& n, const char* t);
void   s_lensort(char* s);



int  main(void) {
	char s[] = "TERMINATOR Gyver Robocop X Spwn";
	puts(s);
	s_lensort(s);
	puts(s);
	return 0;
}



// поиск позиции минимального слова
char*  s_minlen(char* s, int& n, const char* t) {
	char* p, *a = NULL;
	n = 0;
	while(*s) {
		if(isspace(*s) || (s == t)) {
			while(*s && isspace(*s))
				++s;
			for(p = (--s) + 1; (*p) && ! isspace(*p); ++p);
			if(((p - s) < n) || ! n) {
				n = p - s;
				a = s;
			}
			s = p;
		} else
			++s;
	}
	return a;
}



// сортировка слов
void s_lensort(char* s) {
	int n, k;
	char* a, *b, *p, c, *t = s;
	while(*s) {
		if((a = s_minlen(s, n, t)) == NULL)
			break;

		for(b = s, k = n; k > 0; --k) {
			for(p = a; p > s; --p)
				c_swap(c, *p, *(p - 1));
			++a;
			++s;
		}

		if((b == t) && isspace(*b)) {
			for(p = b; p < s - 1; ++p)
				c_swap(c, *p, *(p + 1));
			--s;
		}
	}
}
Проверка: http://codepad.org/tCsUD5vP

Последний раз редактировалось Nuklon; 12.06.2013 в 11:41.
Nuklon вне форума Ответить с цитированием
Старый 12.06.2013, 11:43   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Nuklon Неплохой код...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка слов... CppForYou Общие вопросы C/C++ 2 01.05.2013 01:56
Сортировка слов по алфавиту. MyQwErTy Помощь студентам 0 04.10.2012 23:58
Сортировка слов klin41 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 02.06.2010 04:38
Сортировка слов по алфавиту vital_56 Microsoft Office Word 16 23.12.2009 17:09
Сортировка слов по длине. Артин Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.05.2009 12:01