Напечатать слова в алфавитном порядке

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
ilya0610
Сообщения: 1
Зарегистрирован: 24 янв 2014, 20:16

Дана строка, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами – запятая, за последним словом – точка. Напечатать: Все слова в алфавитном порядке Вот что у меня получилось сделать это разделить слова и записать их в новый массив, если кто может пояснить или написать, как сделать, буду очень признателен:

Код: Выделить всё

#include "stdafx.h"
#include "string.h"
#include "stdio.h"

void razbit(char *str,char slova[30][11],int *nn);
void sort(char *str);

int _tmain(int argc, _TCHAR* argv[])
{
	char s[350] = {"fesa,tre,qwrp,kjfo,aks,ptfgdr,odjhf,bckjd,abgfs.\n"};
	char slova[30][11];
	int i, n = 30;
    gets(s);
	razbit(s, slova, &n);

 
	return 0;
}
void razbit(char*str,char slova[30][11],int *nn)
{		
	int n,i,j;
	char *s, *p = str; 
     n = *nn; 
		for(;*p != '.' ;) 
		{
			while((*p != '.') && (*p == ','))
				p++; 
			    s = p; 
			if (*s != '.') 
			{
				p = strstr(s, ","); 
				if (p == NULL) 
					p = strstr(s, "."); 
					j = p - s; 
					strncpy(slova[n], s, j);
					slova[n][j]='\0';
					n++; 
			}
		}
	*nn = n;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Отсортировать можно абсолютно любым метод сортировки. Если для тебя не проблема написать сортировку массива целых чисел, то и написать сортировку массива строк будет не наминого сложнее. Достаточно место сравнения элементов массива переписать на использование strcmp, а обмен содержимого двух ячеек переписать на использование strcpy.

Предыдущий способ гарантированно даст результат. Но если идёт речь об оптимальном способое, то оптимальным будет завести массив из 30-ти указателей на чар и, сортируя, менять указатели на строки в этом массиве, а не копировать целые слова. Но это уже следующий шаг. Для начала попробуй обычную сортировку.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить