나는이 주제에 대한 좀 더 많은 정보를 찾고 있었고, 내가 찾던 답을 찾지 못하는 것 같아 도움을 얻을 수 있기를 바랍니다!C++에서 문자열 개체 배열을 검색하는 가장 효율적인 방법은 무엇입니까?
과제 중 일부는 문자열 배열 (주소록)을 검색하고 전체 또는 부분 일치 항목이 있으면 일치 항목을 반환하는 프로그램을 작성하는 것입니다. strstr() 함수를 for 루프를 통해 실행하고 배열에 사용자 입력 키워드를 실행 한 결과에 대한 포인터를 설정하여 (아래 참조) C- 문자열 배열을 사용하여 쉽게 수행 할 수 있습니다.
제 질문은 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 오브젝트를 활용하여, 모든 경우에,이 작업을 수행 할 수있을 것입니다 방법입니다'먼저 자신에게 물어 어떤 알고리즘이나 데이터 구조를 사용하여 효율적인 검색을 수행 할 수 있습니다. 현악기를 사용하든 사용하지 않든간에이 초기 지점에서 작동해서는 안됩니다. – PaulMcKenzie
미리 만든 함수가 있는지 확실하지 않지만 짧은 람다를 사용하는'boost :: adapters :: filtered'는 매우 쉽습니다. – chris
아, 언급하지 못했습니다 - 2 학기 CS 학생. 데이터 구조 및 알 고 다음 학기. C++로 옮기기 전에 C를 배웠기 때문에 C-String 메서드를 사용했습니다. 분명히 이것은 매우 작은 목록이지만, 10K 레코드가 있다면 가장 효율적인 경로를 만들고 싶습니다. –