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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2008, 22:56   #1
chipset
 
Регистрация: 10.02.2008
Сообщений: 4
Вопрос сортировка слов(Пузырек)

Есть программа, сортирующая слова в алфавитном порядке методом пузырька (BubbleSort). Считка и запись в текстовые файлы, их там три: 1й-исходный, 2й-промежуточный, и 3й-отсортированный. Все хорошо но никак не могу присобачить порядковые номера к каждой строчке..так чтобы во втором файле получилось!

1 шла
2 собака
3 по
4 роялю

а в третем соответственно..

3 по
4 роялю
2 собака
1 шла



Код:
#include <iostream>
#include <windows.h>
#include <cstring>
using namespace std;

// сортировка пузырьком
void bubbleSort(char **a,int size) {
	int i, j;
	char* x;

	for( i=0; i < size; i++) {            // i - номер прохода
		for( j = size-1; j > i; j-- ) {     // внутренний цикл прохода
			if (strcmp(a[j-1],a[j])>0){
				x=a[j-1];
				a[j-1]=a[j];
				a[j]=x;
			}
		}
	}
}

// Сохранение массива слов
void save(char **a,FILE *f){
	int i=0;
	// пока не встретим NULL пишем в файл
	while(a[i]!=NULL){
		fputs(a[i++],f);
		fputs("\n",f);
	}
}

void main(){
	int size =10000; // размер массива слов (массива указателей на char)
	int str_size =512; // размер одной строки
	char **ar = new char*[size]; // выделяем память под массив указателей
	for(int i=0;i<size;i++) // заполняем массив NULL_указателями
		ar[i] = NULL;// Изначально массив пустой
FILE *f = fopen("1.txt","r"); // открываем исходный файл
	i=0;
	char buf[128]; // под строку
	char *token; // вспомагательн для strtok в каждый укахатель адрес след ликсемы слаживать
	char sep[] =  " -,.!)(?:\ t\n\" "; // разделители
// пока не конец файла и не предел массива строк запоминаем строки в массив строк
	while(!feof(f) && i<size){
		fgets(buf,128,f);
		token = strtok(buf,sep);

		while(token!=NULL){// если нет след слова то 0 выход 
			ar[i] = new char[54];
			strcpy(ar[i],token);
			i++;
			token = strtok(NULL,sep);
		}
		}

	


fclose(f); // закрываем исходный файл

f = fopen("2.txt","w");
	save(ar,f);
	fclose(f);

	bubbleSort (ar,i); // Сортируем
f = fopen("3.txt","w");
	save(ar,f);
	fclose(f);

// освобождаем память
	for(i=0;i<size;i++) 
		delete ar[i];

	delete [] ar;

}
Очень буду благодарен если подскажете как реализовать!..

moderator: используйте тег <CODE>

Последний раз редактировалось merax; 11.02.2008 в 08:56.
chipset вне форума Ответить с цитированием
Старый 10.02.2008, 23:06   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Вы об этом?
Код:
fputs(a[i++],f);
fputs("\n",f);
Я бы заменил на
Код:
fprintf(f, "%d %s\n", i, a[i++]);
B_N вне форума Ответить с цитированием
Старый 11.02.2008, 08:58   #3
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

смотри тут !!!
merax вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
Подсчет слов Stanislav Общие вопросы Delphi 11 28.08.2008 10:37
c\c++ массив слов FreeJaile Общие вопросы C/C++ 7 04.04.2008 00:39
Вставка слов )Игнат( Общие вопросы Delphi 1 16.03.2008 21:58
Сортировка слов по алфавиту victorio Microsoft Office Word 7 15.12.2007 19:03