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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 19:05   #1
COOLik123
 
Регистрация: 11.05.2012
Сообщений: 9
По умолчанию Программа, выводящая отсортированную последовательность сторк

Здравствуйте. Пишу с просьбой о помощи. Программа должна считывать с клавиатуры произвольное количество слов, после чего должна вывести на экран все слова в отсортированном виде. Причём при выводе слова не должны повторяться. Но функция, которая сортирует вектор слов, не работает. Заранее спасибо.
Код:
#include <iostream>
#include <vector>
#include <string>
using namespace std;


void qsort(vector <string> v,int left, int right)  // быстрая сортировка строк 
{	                                             // в лексикографическом порядке	 
	int i, last;

	if(left>=right)
		return;

	v[left].swap(v[(left+right)/2]);

	last=left;

	for (i=left+1;i<=right;i++)
		if(v[i].compare(v[left])<0)
			v[++last].swap(v[i]);

	v[left].swap(v[last]);

	qsort(v,left,last-1);
	qsort(v,last+1,right);
}


int main(){

	vector <string> v;
	int i,j,h,k,u;
	string s;
	i=j=k=0;

	while ((cin>>s) && (s!="Quit")){   // считывание слов, пока не                     
		v.push_back(s);                // введено слово Quit
		i++;
	}

	qsort(v,0,i-1);

	while (j<i){						// вывод слов с проверкой 
		if (j>0){                     // на повторяемость
			h=j-1;
			while (h>=0){
				if	(v[h]==v[j])
					k++;
				h--;
			}
		}
		if (k==0)
			cout<<v[j];
		k=0;
		j++;
	}
	getchar();
	getchar();
}
COOLik123 вне форума Ответить с цитированием
Старый 11.05.2012, 20:46   #2
COOLik123
 
Регистрация: 11.05.2012
Сообщений: 9
По умолчанию

Алгоритм быстрой сортировки для чисел int и строк типа char[] работал нормально. Я пробовал написать свою функцию swap, но эффект тот же - элементы вектора выводятся на экран нормально, но не сортируются. Возможно проблема возникает в том, что qsort сортирует копии элементов вектора, но как сделать так чтобы сортировались оригиналы?
COOLik123 вне форума Ответить с цитированием
Старый 11.05.2012, 21:00   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
void qsort(vector <string> & v,int left, int right)
когда вы сортировали массивы int'ов и т.п., подозреваю, вы передавали указатели на начало массива. но вектор - это класс, в функцию передается его копия, никак не влияющая на то, что вы хотите отсортировать. поэтому нужно передавать не вектор, а ссылку на него.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 11.05.2012, 21:43   #4
COOLik123
 
Регистрация: 11.05.2012
Сообщений: 9
По умолчанию

Granus,спасибо большое. Теперь всё работает. Буду знать на будущее.
COOLik123 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
InjHdc – программа выводящая время в окне игры. mikityak Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 09.04.2013 00:26
Программа, отслеживающая объявления и автоматически выводящая их. 7747853 Помощь студентам 0 27.05.2011 22:16
Программа выводящая таблицу истинности and-silaev Помощь студентам 2 06.01.2011 18:30
Программа, выводящая сама себя Gorychev Общие вопросы Delphi 45 31.01.2010 02:45