Подсчет совпадений в массиве - PullRequest
1 голос
/ 30 марта 2012

Я не могу понять, как это сделать.

Вопрос: Реализовать функцию

int count_matches(const string arr[], int size, string query); 

Возвращает количество строк в массиве, равное query или -1 если размер меньше 0.

Мой ответ:

#include <iostream>
#include <cmath>
#include<string>

using namespace std;

int count_matches(const string arr[], int size, string query){

  int i = 0;
  int numMatches;

  for (;i<size;i++) {

    if (string[i] == (string[i]+1)){
      numMatches++;
    }

  }

  return numMatches;

}


int main(){

  string selection;

  const string array[4]={"dog", "cat", "dog", "dog"};

  cout<<"which animal do you want?"<<endl;
  cin>> selection;

  cout<< "there are " << count_matches(array, 4, selection)<< " matches"<<endl;

  return 0;
}

Что не так?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Как только вы получите свой код для компиляции, вам нужно внимательно посмотреть на этот блок:

if (string[i] == (string[i]+1)) {
    numMatches++;
}

Что вы на самом деле хотите сравнить здесь? string - это тип . Посмотрите еще раз на аргументы, которые вы передаете в функцию, и это должно прояснить.

Затем, когда у вас есть совпадение, вы увеличиваете numMatches. Но с чего это нужно начинать? Какое значение должно начинаться с?


Обратите внимание, что std::count() делает именно то, что должна делать ваша count_matches() функция:

std::count(array, array + 4, selection)

Это, вероятно, не будет определять, кто бы ни отмечал вашу домашнюю работу, но стоит поиграть и узнать, если вы хотите усовершенствовать свои навыки C ++.


Удачи!

1 голос
/ 30 марта 2012
int count_matches(const string arr[], int size, string query){

  int numMatches(0);

  for (int i=0; i<size; ++i)
  {
    if (arr[i] == string)
    {
      ++numMatches;
    }
  }

  return numMatches;
}

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

...