Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6301
Последний выпуск: 19.06.2015

Помогите пожалуйста написать программу на с++

86K
18 ноября 2012 года
macair
1 / / 18.11.2012
Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции STRING:
а) написать программу ввода текста с клавиатуры;
б) напечатать слова текста в алфавитном порядке. Слова печатать через один пробел, без точки.
11K
19 ноября 2012 года
xAtom
65 / / 17.01.2011
Вот держи.

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



struct schar {
   char buf[64];
   schar(void){}
   schar(const char* s) {
      char* p = buf;
      while((*p++ = *s++) != '\0');
   }

   inline operator char*(void) {
      return buf;
   }

   static int pred_sort(const void* a, const void* b) {
      return (tolower((*(schar*)a).buf[0]) < tolower((*(schar*)b).buf[0])) ? -1 : 1;
   }
};



// разделение строки на слова
schar* split_words(const char* s, size_t& size) {
   schar* arr = NULL;
   size_t cnt = 0u;

   for(const char* p = s; *p; ) { // подсчёт кол-во слов
       if(isalpha(*p)) {
           cnt++;
           while(*p && isalpha(*p))
               *p++;
       } else
           *p++;
   }
   if(cnt == 0u)
       return NULL;

   if((arr = new schar[cnt]) == NULL)
       return NULL;

   size = cnt;

   schar b;
   int   n = 0;
   for(const char* i = s; *i; *i++) { // разбивка строки на слова
       if(isalpha(*i)) {
           char* f;
           for(f = b; *i && isalpha(*i); *f++ = *i++);
           *f = '\0';
           arr[n++] = b;
           *i--;
       }
   }
   
   // сортируем массив в алфавитном порядке не взирая на регистр символов
   qsort((void*)arr, cnt, sizeof(schar), schar::pred_sort);
   return arr;
}




int main(void)
{
   char buf[255];
   printf("enter str: ");
   fgets(buf, sizeof(buf) - 1, stdin);

   size_t size;
   schar* arr  = split_words(buf, size);
   if(arr == NULL)
       return 1;

   for(size_t i = 0u; i < size; i++)
      fprintf(stdout, "%s ", (char*)arr[i]);

   delete[] arr;
   getchar();
   return 0;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог