Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.8.42] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
А число городов ограничено???
Добавлено Вот код, который сортирует слова в строке по алфавиту: #include<stdlib.h> #include<string.h> #include<stdio.h> void swap(char* a, char* b) /* ----- меняем местами две строки -----*/ { int len = (strlen(a)>strlen(b))? strlen(a):strlen(b);// вычисление наиб. длины char * tmp = new char[len+1]; // хапнем пямяти strcpy(tmp,a); strcpy(a,b); strcpy(b,tmp); delete tmp; } void selectSort(char a[][10], long size) /* ----- Сортировка выбором ----- */ { for(int i = 0; i <= size; i++) for(int j = 0 ; j < size-i; j++) if(strcmp(a[j],a[j+1])>0) // если a[j] > a[j+1] => меняем swap(a[j],a[j+1]); } int main( void ) { char words[30][10]; // тут будут находиться слова ( максимум 30 слов не длиннее 10 символов ) char string[]="mame mama mamy"; // исходная строка... /* Просто strtok() изменяет переданную ей строку */ char tmp[300]; strcpy(tmp,string); /* --------------------------------------------- */ char word_sort[300]; // тут будет строка со отсортированными по алфавиту словами char *word = new char[10]; // сюда будет записываться очередное слово int w = 0; // кол-во слов /* ----- Разбиваем строку на слова ------ */ strcpy(words[0],strtok(tmp," ")); while(word = strtok(NULL," ")) strcpy(words[++w],word); /* -------------------------------------- */ selectSort(words,w); // сортируем word_sort[0]='\0'; for(int i = 0; i < w+1; i++) // склеиваем слова { strcat(word_sort,words[i]); strcat(word_sort," "); // добавляем пробел между словами } word_sort[strlen(word_sort)-1]='\0'; // убираем ненужный последний пробел printf("Ishodnaya stroka: %s\n", string); printf("Sortirovka : %s\n", word_sort); return 0; } Переделать думаю сможешь???? А лучше всетаки STL юзать... |
Сообщ.
#17
,
|
|
|
так ....а мне надо в одну строку все слова слить...не напомните...
|
Сообщ.
#18
,
|
|
|
#include <iostream> #include <conio.h> #include <windows.h> int mystrcmp(const void* ,const void*); void main(void){ //читаем файл. HANDLE hFile=CreateFile("1.txt",GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if (hFile==INVALID_HANDLE_VALUE){ std::cout << "CreateFile() error N" <<GetLastError(); _getch(); return; } HANDLE hFileMap = CreateFileMapping(hFile,0,PAGE_READONLY,0,0,0); if (hFileMap==NULL){ std::cout << "CreateFileMapping() error N" <<GetLastError(); _getch(); CloseHandle(hFile); return; } const char* const rbuff = (char*)MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0); if (rbuff==NULL){ std::cout << "MapViewOfFile() error N" <<GetLastError(); _getch(); CloseHandle(hFile); CloseHandle(hFileMap); return; } //!читаем файл //запихиваем строки в char** const int iFileSize=GetFileSize(hFile,0); char** SortMas=NULL; int SortMasLen=0; int sm=0; BOOL NoReadErrors=TRUE; while(1){ int len; for (len=0;;len++) if (rbuff[sm+len]==' ' || sm+len ==iFileSize) break; // Добавь сюда свой символ разделитель. if (len==0){ std::cout<<"bad file format"; NoReadErrors=FALSE; break; } SortMas=(char**)realloc(SortMas,sizeof(char*)*(++SortMasLen)); SortMas[SortMasLen-1]=(char*)malloc(len); SortMas[SortMasLen-1][len]='\0'; memcpy(SortMas[SortMasLen-1],rbuff+sm,len); if (sm+len==iFileSize) break; else sm+=len+1; } //!запихиваем строки в char** if (NoReadErrors){ qsort(SortMas,SortMasLen,sizeof(char*),mystrcmp); for (int i=0;i<SortMasLen;i++){ std::cout << SortMas[i] << "\n"; } //засовываем все в 1 строку. char* stroka; int len=0; for (int i=0;i<SortMasLen;i++){ len+=strlen(SortMas[i])+1; } stroka=(char*)malloc(len*sizeof(char)); int sm=0; for (int i=0;i<SortMasLen;i++){ int curlen=strlen(SortMas[i]); strcpy(stroka+sm,SortMas[i]); stroka[sm+curlen]=' '; //поставь здесь свой символ разделитель. sm+=curlen+1; } stroka[sm-1]='\0'; //!засовываем все в 1 строку. std::cout << stroka; } UnmapViewOfFile(rbuff); CloseHandle(hFileMap); CloseHandle(hFile); _getch(); } int mystrcmp(const void* s11,const void* s22){ const char* s1 = (*(const char**)s11); const char* s2 = (*(const char**)s22); return strcmp(s1,s2); } Добавлено сортирует файл 1.txt , где слова записаны через пробел. Нужно стоб они были записаны через другой символ разделитель --> смотри коментарии к проге. |
Сообщ.
#19
,
|
|
|
ничего себе! не многовато ли?
Добавлено А всё всё понял...спасибо.... Добавлено A чё он функции qsort не видит?она же стандартная? qsort(SortMas,SortMasLen,sizeof(char*),mystrcmp); |
Сообщ.
#20
,
|
|
|
у меня все видит...
воткни тогда еще <stdlib.h> and <search.h> |
Сообщ.
#21
,
|
|
|
ща... stdlib уже втыкал,...<searchпомогло....
Я в долгу! Спасибо . |
Сообщ.
#22
,
|
|
|
Цитата byte @ lex Ferrum, твой код можно немного улучшить, используя конструктор, принимающий 2 итератора вместо конструктора по умолчанию. Тогда и один copy не надо использовать. Кстати, а как должен выглядить такой код? Если, например, так: std::set<std::string> m_Cities(std::istream_iterator<std::string>(file), std::istream_iterator<std::string>()); То... тут существует маааааалеьнькая такая проблемка - он не сделает того, что от него ожидает программист. Внимание вопрос - почему ? (читавшие последнего Саттера - молчать!!! Дайте людям помучиться ). |
Сообщ.
#23
,
|
|
|
Цитата Flex Ferrum @ Кстати, а как должен выглядить такой код? Если, например, так: Ну почему же? Можно примерно так: std::set<std::string> m_Cities((std::istream_iterator<std::string>(file)), std::istream_iterator<std::string>()); - добавил дополнительные круглые скобки вокруг первого аргумента. |