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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 17:55   #1
tuyu
Новичок
Джуниор
 
Регистрация: 05.01.2012
Сообщений: 4
По умолчанию вывести строку

Дана строка, состоящая из русских слов, набранных заглавными бук-вами и разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в алфавитном порядке
tuyu вне форума Ответить с цитированием
Старый 05.01.2012, 23:50   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

tuyu, почему именно заглавными? Есть какая-та фишка? Я не понял.

Следующая программка считывает слова из терминала (в том числе и кириллицу) и выводит их в одну строку, через пробел, в отсортированном порядке.

Пример учебный. Защиты почти нет, запуска с передачей параметров тоже. qsort, кстати, из Кернига и Ритчи. Она принимает массив указателей. К сожалению, не смог пока применить стандартную qsort --> ссылка

Может кто-нибудь подскажет, как заменить данную qsort на стандартную? Было бы очень здорово

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

#define MAXWORDS 100

/*
Алгоритм:
   - считываем слова в массив слов
   - сортируем считанные слова
   - выводим отсортированные слова на терминал
*/

void qsort_(void *words[], int left, int right, int (*comp)(void*, void*));
int readwords(char* words[], int lim);

int main(int argc, char* argv[])
{
    char* words[MAXWORDS];
    int n, i;
    char* prog = argv[0];

    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    n = 0;
    if ((n = readwords(words, MAXWORDS)) > 0) {
        // сортировка
        qsort_(words, 0, n-1, strcmp);
        printf("\n");
        // вывод на экран
        for (i = 0; i < n; i++) {
            printf((i != n-1) ? "%s " : "%s\n", words[i]);
        }
    }
    else {
        fprintf(stderr, "%s: на входе нет данных\n", prog);
    }

    return 0;
}

// qsort_: сортировка v[left]...v[right] в порядке возрастания
void qsort_(void *v[], int left, int right, int (*comp)(void*, void*))
{
    int i, last;
    void swap(void* v[], int i, int j);

    if (left >= right) {
        return;
    }
    swap(v, left, (left+right)/2);
    last = left;
    for (i = left+1; i <= right; i++) {
        if ((*comp)(v[i], v[left]) < 0) {
            swap(v, ++last, i);
        }
    }
    swap(v, left, last);
    qsort_(v, left, last-1, comp);
    qsort_(v, last+1, right, comp);
}

// swap: меняет местами элементы i и j в массиве v
void swap(void* v[], int i, int j) {
    void* temp;

    temp = v[i];
    v[i] = v[j];
    v[j] = temp;
}

#define MAXWORD 100

// qwords: считывает слова в массив слов
int readwords(char* words[], int lim)
{
    int i;
    unsigned char buf[MAXWORD];
    char* p;

    for (i = 0; i < lim-1 && scanf("%s", buf) != EOF; i++) {
        p = malloc(strlen(buf));
        strcpy(p, buf);
        words[i] = p;
    }

    return i;
}
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу вывести строку Demonaz Visual C++ 2 15.08.2011 18:55
Вывести данные в строку в Chrome Svetix HTML и CSS 2 18.03.2011 12:45
Вывести строку с наибольшей цифрой Delphinchik PHP 3 15.11.2010 21:58
Вывести строку на экран Dasharnb777 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 13.02.2010 18:59
Вывести конкретную строку из файла Captain Nemo Общие вопросы Delphi 9 15.05.2007 03:44