Linear Search in a Char Array -- C++ (Visual Studio 2005)

bad_sofa picture bad_sofa · May 24, 2009 · Viewed 10.6k times · Source

I am very new to C++ programming and you will see why.

I want to make a character array consisting of a few words that I want to search with a linear search function. Does this array have to be a two-dimensional array? For example:

char Colors[3][6] = {"red", "green", "blue"};

I tried it like this:

char Colors[] = {"red", "green", "blue"};

This gave me a "too many initializers" error.

I assume the 1st method is correct because it states the amount of elements in the array and the maximum length of an element, correct?

Now how would I implement a linear search function to find a word inside that array? Can I do something like the following:

(Assuming the linearSearch function has already been declared)

char searchKey;  
char element;

char Colors[3][6] = {"red", "green", "blue"};

printf("Enter the color to look for: \n");

scanf("%s", searchKey);

element = linearSearch(Colors, searchKey, ??); //?? is where I don't know what to enter

if (element != -1)  
{  
    printf("Found the word.\n");  
}  
else  
{  
    printf("Didn't find the word.\n");  
}

Is this possible? If so, what would the declaration look for the linearSearch function? I hope I provided enough information for this to be somewhat usable.

edit: Thanks all for the help, got the program working as intended.

Answer

rlbond picture rlbond · May 24, 2009

I would recommend to learn about the C++ standard library, which would help you very much. For example,

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

vector<string> words;
words.push_back("red");
words.push_back("blue");
words.push_back("green");

if (find(words.begin(), words.end(), "green") != words.end())
    cout << "found green!"
else
    cout << "didn't find it";

Why implement linearSearch yourself? c++ already has std::find which does it for you! Moreover, if you use a set instead of a vector, you can now use std::binary_search which is O(log n) instead of O(n), since a set is sorted.