Форум программистов, компьютерный форум CyberForum.ru

Отсортировать слова по длине - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вид функций http://www.cyberforum.ru/cpp-beginners/thread88787.html
Помогите оформить эту программу в виде функций! Условие задачи точно не помню Сначало найти сумму элементов матрицы А, потом заменить среднее значение этой суммы строкой матрицы b. #include<iostream.h> #include<conio.h> #include<math.h> int const n=4, m=4; void main () { clrscr ();
C++ Клавиши UP, DOWN, LEFT, RIGHT Как в консольных приложениях работать с клавишами UP, DOWN, LEFT, RIGHT. Можете написать пример, перемишения точки по экрану http://www.cyberforum.ru/cpp-beginners/thread88779.html
Сумма элементов с положительными индексами C++
Задача В одномерном массиве найти сумму элементов с положительными индексами! Можно ли её адаптировать под borland c++ 3.1? Добавлено через 24 минуты Извиняюсь, задача звучит так В одномерном массиве найти сумму элементов с четными индексами!
Отделение интерфейса класса от реализации C++
Осваиваю раздел одной книги "Отделение интерфейса класса от реализации". То что получилось можно и нужно скачать по адресу http://************.com/files/sd0dbt0bs (Проект VS9). GradeBook.h - заголовочный файл с определением класса. Gradecook.cpp - файл исходников с определением элемент функций класса. main.cpp - файл исходников, в котором находится ф-я int main(). Интересуют именно строки...
C++ Прототип и функция http://www.cyberforum.ru/cpp-beginners/thread88765.html
Не могу решить задачу Напишите прототип и функцию, вычисляющщую количество четных и нечетных чисел в двумерном массиве. Помогите пож-ста!
C++ Иттераторы Никогда не пользовался, а теперь хочу разобраться. Запостите, пожалуйста ответы на вопросы: 1. Что такое иттераторы? 2. Как их делать? 3. Как ими пользоваться? 4. Каким образом при этом достигается ускорение? подробнее

Показать сообщение отдельно
qwarta
73 / 73 / 7
Регистрация: 20.11.2009
Сообщений: 238
30.01.2010, 18:24     Отсортировать слова по длине
Хотел помочь VLAD1M1R с решением, да так и застрял. Может кто подскажет:

1. Почему вывод вроде бы делается правильно, но с лишними символами?
язва#
инфекционноеx☺=
группы=
животного☺=
язвой☺=
группы= животного☺= инфекционноеx☺= язва# язвой☺=
В результате не работает сортировка. В процессе написания программы в строке 81 применял одномерный массив mas[k] и вывод был правильным.

2. Нужно отсекать символы кавычек. Как их вставить в строку if(!strchr(",.!?-:;()",ch))

Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//Есть файл со словами. Вывести на экран все слова, в которых количество гласных, стоящих на 
//позициях с четными и нечетными номерами одинакова. Слова отсортировать по длине.
 
#include <stdio.h>
#include <windows.h>
#define MAX 20
 
int main(void)
{
  char str[MAX],mas[MAX][MAX],buf[MAX],ch;
  int i,k,len,chet,nechet,cout;
  FILE *fp;
 
  char* Rus(char *message)                            // для вывода русского текста
  {
        CharToOem(message, buf);
        return buf;
  }
 
  void qsort_st(char ftm[][MAX],int left, int right)      // сортировка строк методом Хоара
  {
   register int i,j;
   char *st;
   char temp[MAX];
   
   i=left; j=right;
   st=ftm[(left+right)/2];
   
   do {
     while((strcmp(ftm[i],st)<0) && (i<right)) i++;
     while((strcmp(ftm[j],st)>0) &&(j>left)) j--;
     if(i<=j)
     {
       strcpy(temp,ftm[i]);
       strcpy(ftm[i],ftm[j]);
       strcpy(ftm[j],temp);
       i++;
       j--;
     }
   }while(i<j);
   if(left<j) qsort_st(ftm,left,j);
   if(i<right) qsort_st(ftm,i,right);
  }
 
  if((fp=fopen("F.txt","r"))==NULL)
  {
    printf("Error opening file!\n");
    exit(1);
  }
  i=k=len=chet=nechet=cout=0;
 
  while (!feof(fp))                          // пока не достигнут конец файла
  {
    ch=getc(fp);
    if(ch==' ' || ch=='\n' || ch=='\t')      // разделяем на слова
    {
      if(len>1)                              // пропускаем однобуквенные союзы
      {
        str[i]='\0';
        for(i=0;i<len;i++)
        {
          if(strchr("аеиоуыэюя",str[i]))     // считаем гласные
          {
            cout=i+1;
            if(!(cout%2))                    // если на четной позиции
              chet++;
            else                             // если на нечетной позиции
              nechet++; 
          }
        }
        if((chet != 0) && (chet==nechet))    // если кол-во гласных одинаковое
        {
          for(i=0;i<len;i++)
          {
            if(i>MAX-1)
            {
              printf(Rus("Превышение отведенного лимита букв для слова"));
              exit(1);
            }
            mas[k][i]=str[i];                   // записываем слово
          }
//---------- в рабочей программе этого не нужно - промежуточный вывод -------------------
          printf("%s\n",Rus(mas[k]));
//--------------------------------------------------------------------------------------- 
          k++;
          if(k==MAX-1)
          {
              printf(Rus("Нужно увеличить объем массива для чтения!"));
              exit(1);
          }
        }
      }
      i=len=chet=nechet=0;
    }
    else
    {
      if(!strchr(",.!?-:;()",ch))             // если знак препинания - пропускаем его
      {
        str[i]=ch;                          // иначе записываем символ в массив
        i++;
        len++;
      }
    }
  }
  qsort_st(mas,0,k-1);                         // сортируем слова по длине
  for(i=0;i<k;i++)
  {
    printf("%s  ",Rus(mas[i]));
  }
  fclose(fp);
  getch();
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru