1 Востаннє редагувалося popafekah (09.11.2018 18:08:09)

Тема: завдання з c++

Добрий день, є ось така задачка по с++
запитати у людини рядок, треба порахувати кількість входжень кожної букви і вивести статистику, наприклад:
vvedi stroku: hello WORLD
L - 3
O - 2
H - 1
E - 1
W - 1
R - 1
D - 1
алгоритм сортування повинен бути саме пузириний.
Моя програма працює ось так:
vvedi stroku: hello
h - 2
e - 2
l - 1
l - 1
o - 1
А повинна бути ось так:
vvedi stroku: hello
l - 2
h - 1
e - 1
o - 1
Прошу допомогти мені вирішити це завдання.
Ось мій код:

#include <iostream>
using namespace std;

int main() {
  int i = 0;
  int j = 0;
  int number[200];
  int max = 0;
  int temp = 0;
  while (i < 200) {
    number[i] = 0;
    i++;
  }
  i = 0;

  char enter[200] = "";
  cin.getline(enter, 200);
  i = 0;

  while (i < 200) {
    if (enter[i] >= 'a' && enter[i] <= 'z') {
      max++;
    }
    i++;
  }

  max += 1;

  while (j < max) {
    if (enter[i] >= 'a' && enter[i] <= 'z') {
      if (enter[j] == enter[i]) {
       number[i] += 1;
      }
    }
    if (i == 200) {
      i = 0;
      j++;
    }
    i++;
  }
  i = 0;
  j = 0;

  while (i < max) {
    if (number[i] == 0) {
        number[i]++;
    }
    i++;
  }
  i = 0;


  while (i < max) {
    if (number[i] < number[i + 1]) {
      temp = number[i];
      number[i] = number[i + 1];
      number[i + 1] = temp;
    }
    i++;
  }
  i = 0;

  while (i < max) {
    if (number[i] < number[i + 1]) {
      temp = number[i];
      number[i] = number[i + 1];
      number[i + 1] = temp;
    }
    i++;
  }

  i = 0;

  while (i < max) {
    if (enter[i] >= 'a' && enter[i] <= 'z') {
        cout << enter[i] << " - " << number[i] << endl;
    }
    i++;
  }
  system("pause");
  return 0;
}

2

Re: завдання з c++

Для початку розберіться з тим, що ви сортуєте. Вам треба сортувати пари (літера, кількість), а не самі числа, інакше "бульбашка" не спрацює. Структури вже вчили? Якщо так - вам потрібно:
1. Створити масив для підрахунку літер;

struct letter_count{char letter='\0'; int count=0;};
letter_count letters[256];//ідемо найтупішим шляхом
for(i=0;i<256;++i)
    letters[i].letter=char(i);

2. Заповнити його значеннями зі стрічки;

for(символ c зі стрічки)
  if(isalpha(c))
    letters[int(toupper(c))]++;

3. Відсортувати.

В принципі, якщо не вчили - все так само, тільки знадобляться два масиви (чисел та символів) і їх треба буде сортувати одночасно за порядком чисел.
Нулі в кінці не виводити.