В настоящее время я работаю над небольшим заданием, используя Графики для отображения символов в списке смежности.Обычно наш профессор предоставляет нам примеры из класса, которые он разрабатывает, однако на этот раз он не дал нам никаких примеров.Это всего лишь одно дополнительное зачетное назначение, но реальная причина, по которой я обращаюсь за помощью, заключается в том, что в пятницу у нас есть 50 баллов.Я и мои другие одноклассники не знаем, что происходит в настоящее время.Это функция, которую я не могу получить.
Мой главный вопрос - как мне преобразовать значение строки *, возвращаемое функцией split, для использования при вызове функции markEdge?
void loadListFromFile(Graph& g, string filename) {
/* TODO (1):
*
* Open the file and update the matrix with the proper
* edge status, i.e. 1 if there is an edge from source
* to target.
*
* The file format is:
*
* sourceNode adjacentNode1 adjacentNode2 ...adjacentNode3
*
* Each node is a single character in the range A-Z.
*/
ifstream ifs;
ifs.open(filename);
if (ifs.is_open() == false){
cerr << "Error opening file for reading." << endl;
}
string line;
int tokenCount;
getline( ifs, line);
while (!ifs.eof()){
split(line, ' ', tokenCount);
getline(ifs, line);
}
}// end loadListFromFile()
Здесь указана функция, используемая для разделения значений
//given
string * split(const string& str, const char delimiter, int& tokenCount){
string * fields = nullptr;
tokenCount = 0;
string token;
string remaining = str;
if (remaining.back() == '\n') {
remaining.pop_back();
}
remaining.push_back(delimiter);
size_t delimiterPos = remaining.find_first_of(delimiter, 0);
while ( delimiterPos != string::npos ) {
token = remaining.substr(0, delimiterPos);
remaining = remaining.substr(delimiterPos + 1);
if ( fields ) {
// resize array and add new token.
string * fieldsTmp = new string [tokenCount + 1];
for (int i = 0; i <= tokenCount - 1; i++) {
fieldsTmp[i] = fields[i];
}
fieldsTmp[tokenCount++] = token;
delete [] fields;
fields = fieldsTmp;
fieldsTmp = nullptr;
} else {
// create array and add first token.
fields = new string[tokenCount + 1];
fields[tokenCount++] = token;
}
delimiterPos = remaining.find_first_of(delimiter, 0);
}
return fields;
}// end split()
Вот функция, которую я считаю верной.
void markEdge(const int fromIndex, const char node) {
/* TODO (1):
* Add the node to the list at index fromIndex.
*/
adjList->pushAt(fromIndex, node);
} // end markEdge ()
Спасибо за помощь.