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

Переставить слова заданного предложения в соответствии с ростом согласных в этих словах. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа считывает двузначное число и выводит через пробел каждую цифру отдельно http://www.cyberforum.ru/cpp-beginners/thread416961.html
Программа считывает двузначное число и выводит через пробел каждую цифру отдельно.
C++ Многомерный массив Найти максимальный элемент в массиве. Размеры массива задайте сами. Сделайте три варианта программы. В первом элементы массива определяются в программе, во втором задаются пользователем, а в третьем заполняются с помощью генератора случайных чисел. Исходный и конечный массивы выведите на экран. Буду очень благодарен. http://www.cyberforum.ru/cpp-beginners/thread416957.html
C++ Одномерный массив
Вывести на экран все нечетные числа в массиве . Размер массива задайте сами. Сделайте три варианта программы. В первом элементы массива определяются в программе, во втором задаются пользователем, а в третьем заполняются с помощью генератора случайных чисел. Исходный и конечный массивы выведите на экран Помогите пожалуйста, буду очень благодарен. Добавлено через 25 минут или подскажите...
C++ Переделать задачу из подсчета суммы после нуля в подсчет суммы после минимального
Здравствуйте, помогите переделать задачу из подсчета суммы после нуля в подсчет суммы после минимального. Вот подсчет суммы после нуля: #include <iostream.h> #include <conio.h> #include <iomanip.h> #include <system.hpp> int vvod(); int vivod(int n1,int s1); int obrab(int n1);
C++ В одномерном массиве посчитать сумму элементов до минимального. http://www.cyberforum.ru/cpp-beginners/thread416925.html
сейчас сижу на экзамене и попалась задача: В одномерном массиве посчитать сумму элементов до минимального. Никак не могу решить,помогите пожалуйста. Заранее спасибо. Добавлено через 1 минуту но желательно без особых наворотов т.к только второй курс Спасибо.
C++ В одномерном массиве посчитать сумму элементов до минимального Помогите написать программу. В одномерном массиве посчитать сумму элементов до минимального. Заранее спасибо. подробнее

Показать сообщение отдельно
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 17:16     Переставить слова заданного предложения в соответствии с ростом согласных в этих словах.
Почти дописал, но сдох при вводе русских символов. В консоли видны норм, при выводе видны норм, но при обработке не норм. По тогда нужно иметь по 2 байта на символ... короче запарно. Если разберусь, то отпишусь.

Добавлено через 35 минут
Вроде сделал, вот что получилось.
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
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
 
using namespace std;
 
template <class TYPE>
void swap( TYPE *a, TYPE *b )
{
  TYPE tmp = *a;
  *a = *b;
  *b = tmp;
}
 
void main( void )
{
  wcout.imbue(locale("rus_rus.866"));
  wcin.imbue(locale("rus_rus.866"));
  
  const int MAX_STR = 100;
  wchar_t str[MAX_STR + 1];
  const int NUM_OF_SOGL = 20;
  wchar_t sogl_dig[NUM_OF_SOGL] = {L'Б', L'В', L'Г', L'Д', L'Ж', L'З', L'К', L'Л', L'М', L'Н', 
                                   L'П', L'Р', L'С', L'Т', L'Ф', L'Х', L'Ц', L'Ч', L'Ш', L'Щ'};
  wcout << L"Insert string: ";
  wcin.getline(str, MAX_STR);
 
  wchar_t *p = str;
  wchar_t prev = L' ';
  int numOfWords = 0;
  // Ищем кол-во слов
  while (*p != 0)
  {
    // Если наткнулись на начало нового слова
    if (prev == L' ' && *p != L' ')
      numOfWords++;
    prev = *p;
    p++;
  }
 
  // Массив указателей на начало слов
  wchar_t **word = new wchar_t *[numOfWords];
  // Массив кол-в согласных в словах
  int *sogl = new int[numOfWords];
  wchar_t *p2;
  prev = L' ';
  int i = 0, j;
  p = str;
  while (prev != 0)
  {
    // Если наткнулись на начало нового слова
    if (prev == L' ' && *p != L' ')
      word[i] = p;
    else if (prev != L' ' && (*p == L' ' || *p == 0)) // Нашли конец слова
    {
      // Считаем ко-во слагаемых
      sogl[i] = 0;
      p2 = word[i];
      while (*p2 != L' ' && *p2 != 0)
      {
        for (j = 0; j < NUM_OF_SOGL; j++)
        {
          if (*p2 == sogl_dig[j] || *p2 == L'а' + sogl_dig[j] - L'А') // Тута русские буквы
          {
            sogl[i]++;
            break;
          }
        }
        p2++;
      }
      i++;
    }
    prev = *p;
    p++;
  }
  // Заменим все пробелы на 0 для удобства вывода
  p = str;
  while (*p != 0)
  {
    if (*p == L' ')
      *p = 0;
    p++;
  }
 
  // Проверка
  for (i = 0; i < numOfWords; i++)
    wcout << word[i] << L": " << sogl[i] << L"\n";
 
  // Сортируем слова по убыванию согласных
  int max;
  for (i = 0; i < numOfWords - 1; i++)
  {
    max = i;
    for (j = i + 1; j < numOfWords; j++)
      if (sogl[j] > sogl[max])
        max = j;
    if (max != i)
    {
      swap(&sogl[max], &sogl[i]);
      swap(&word[max], &word[i]);
    }
  }
 
  // Выводим слова
  wcout << L"Result: ";
  for (i = 0; i < numOfWords; i++)
    wcout << word[i] << L" ";
  wcout << L"\n";
  system("pause");
}
 
Текущее время: 22:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru