Проверьте, существует ли элемент в двумерном массиве C ++

0

Я пытаюсь проверить, есть ли элемент символов в моем выходном массиве. Массив получает частоту символов в строке. Поэтому я хочу сказать, если текущий символ находится в массиве, а затем добавьте 1 к частоте, добавьте символ в массив с частотой 1. Кроме того, я хочу, чтобы таблица отображала верхнюю 5-ю наивысшую частоту в порядке.

EX, из чего должна выглядеть таблица:

  character: a b c d
  freqency:  1 2 3 4


string input = GetInputString(inputFileName);
char ** output; 

for (int i = 0; i < sizeof(output); i++)
{
      if (input [count] == output[i][]) // this is where my issue is
      {

            //.......
      }

}
Теги:
arrays
sorting

2 ответа

2
Лучший ответ

Вы можете использовать std::vector<std::pair<char,int>> для сохранения символа и подсчета.

string input("1212345678999");

std::vector<std::pair<char, int>> sp;
for(auto c : input)
{
  auto it = std::find_if(sp.begin(), sp.end(), 
                         [=](const pair<int, char>& p) {return p.first == c; });
  if (it != sp.end())
  {
    it->second++;  // if char is found, increase count
  }
  else
  {
    sp.push_back(std::make_pair(c, 1)); // new char, add an entry and initialize count to 1
  }
}

Чтобы отобразить верхнюю 5 самых высоких частот по порядку, вы можете сортировать по count в приличном порядке:

std::sort(sp.begin(), sp.end(), 
                      [](const pair<int, char>& p1, const pair<int, char>& p2)
                      {
                         return p1.second > p2.second; 
                      });
1

Предполагая, что ваш пример означает, что "a" - 0,0, "b" - 0,2, 1 - 1,0 и т.д., Что означает, что символ всегда находится в первой строке, вам просто нужно проходить через каждый запись 0 [x].

// you should declare your array as an array
char output[2][26] = {0}; // {0} initialises all elements;
// ... assign values to output.

// I assume there a count loop here, that checks for the upper bounds of input.
// ...
// You have to determine how many columns there are somehow, 
// I just made a static array of 2,26
const int columnsize = 26; 
for (int i = 0; i < columnsize;   i++)
{
  if ( input[count] == output[0][i] )
  {
        // found the character
  }
}

Это должно сделать вашу реализацию, но есть лучшие или, по крайней мере, более простые способы сделать это. Например, если ваши размеры массива не фиксированы во время компиляции, вы можете использовать вектор векторов. Или, если вы просто хотите отслеживать появление символов, вы можете использовать stl-карту символов для частоты.

  • 0
    Да, я смотрел на векторы, и они кажутся намного проще, может быть, я просто попробую работать с ними вместо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню