Я искал дополнительную информацию по этой теме и не могу найти ответ, который я ищу, поэтому надеюсь, что вы сможете помочь!Самый эффективный способ поиска массива строковых объектов в C++?
Часть задания, над которым я работаю, это написать программу, которая ищет массив строк (адресную книгу) и возвращает совпадения, если найдено полное или частичное совпадение. Я могу сделать это легко, используя массив C-Strings, причем функция strstr() работает через цикл for и устанавливает указатель на результат запуска ключевого слова пользователя в массив (см. Ниже).
Мой вопрос: как я смогу это сделать, если вообще, используя объекты String? Я также должен учитывать, что существует более одного возможного совпадения. Является ли это наиболее эффективным способом работы с этой программой? Я уже представил свою рабочую версию, мне просто интересно узнать о некоторых других способах выполнения одной и той же задачи!
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
bool isFound = false; // Flag to indicate whether contact is found
const int SIZE = 11; // Size of contacts array
const int MAX = 50; // Maximum characters per row
char contacts[SIZE][MAX] = {
"Jig Sawyer, 555-1223",
"Michael Meyers, 555-0097",
"Jason Vorhees, 555-8787",
"Norman Bates, 555-1212",
"Count Dracula, 555-8878",
"Samara Moran, 555-0998",
"Hannibal Lector, 555-8712",
"Freddy Krueger, 555-7676",
"Leather Face, 555-9037",
"George H Bush, 555-4939",
"George W Bush, 555-2783"
};
char *ptr = NULL; // Pointer to search string within contacts
char input[MAX]; // User search input string
// Get the user input
cout << "Please enter a contact to lookup in the address book: ";
cin.getline(input,MAX);
// Lookup contact(s)
for (int i=0; i<SIZE; i++)
{
ptr = strstr(contacts[i], input);
if (ptr != NULL)
{
cout << contacts[i] << endl;
isFound = true;
}
}
// Display error message if no matches found
if (!contactFound)
cout << "No contacts found." << endl;
return 0;
}
Как вы можете сказать, я люблю фильмы ужасов :)
'Мой вопрос, как я был бы в состоянии сделать это, если на всех, используя объекты типа String' Сначала спросите себя какой алгоритм или структуру данных можно использовать для эффективного поиска. Используете ли вы Strings или нет, не следует вступать в игру в этой начальной точке. – PaulMcKenzie
Я не уверен, что для него есть функция «готовой», но «boost :: adapters :: filters» с короткой лямбдой делает это довольно легко. – chris
Ах, не упомянул - студент 2-го семестра CS. Структуры данных и Algos в следующем семестре. Я пошел с методом C-String просто потому, что я изучил C, прежде чем переходить на C++. Очевидно, это очень маленький список, но если бы у меня было 10K записей, я бы хотел пойти наиболее эффективным путем. –