Как найти количество элементов в массиве строк (строка передается функции) - PullRequest
0 голосов
/ 23 июня 2010
#include<iostream>
#include<string> 


using namespace std;

class Prerequisites
{
    public:
    void orderClasses(string* Input);
};


void Prerequisites::orderClasses(string* Input)
{
        // Need to find the length of the array Input

}

int main()
{

    Prerequisites A;

    string classes[]={"CSE121: CSE110",
        "CSE110:",
        "MATH122:"
         };


    A.orderClasses(classes);

}

Мне нужно найти длину классов массива [] в методе orderClasses. Я не могу изменить сигнатуру метода orderClasses! Это требование.

Ответы [ 3 ]

2 голосов
/ 23 июня 2010

Вы должны передать число элементов в массиве в orderClasses(). Поскольку это не вариант, рассмотрим несколько альтернатив:

  • Добавьте еще одну функцию-член к Prerequisites, чтобы сообщить, насколько большим будет массив при вызове orderClasses().
  • Используйте значение стража для последней строки в массиве, чтобы, когда вы видите это значение в функции, вы знали, что достигли конца.
  • Сделать первую строку в массиве строкой, содержащей количество элементов в массиве.

Ни одно из этих решений не является хорошим решением проблемы: лучший вариант, хотя и при использовании массива, конечно, просто передать размер массива функции. В большинстве сценариев было бы даже лучше вообще не использовать массив и просто передавать std::vector<std::string>, содержащий строки.

0 голосов
/ 23 июня 2010

Я никогда не слышал, чтобы в с ++ люди использовали массивы, когда есть гораздо более мощные инструменты STL.

0 голосов
/ 23 июня 2010

Информация просто отсутствует.Не можете ли вы добавить последний элемент в массив classes[], который является «известным маркером конца / стража»?Это соответствует требованию не менять сигнатуру метода (вы просто изменяете передаваемые ему данные, а не сигнатуру; -).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...