Линейный поиск в массиве Const Char*

#c #sorting

#c #сортировка

Вопрос:

Я пытаюсь выполнить линейный поиск в массиве строк const char *, который у меня есть, и мне нужно время, чтобы понять, что здесь не так.

Массив находится в файле .h и выглядит следующим образом:

 #pragma once
#include <iostream>
#include <string>
using namespace std;


const char* names[] = { "rodger", "michael", "tina", "jose", "chris", "andrew" };
 

И код, который я использую для своего линейного поиска, выглядит следующим образом:

 int linear_search(int array[], int size, int value) {
    
    
    for (int i = 0; i < size; i  ) {
        if (value == names[i]) {
            return i;
        }
    }

}
 

Компилятор выдает мне сообщение об ошибке, что я не могу сравнить типы int и типы const char, но как мне это сделать, если мой массив состоит из строк? Не только целые числа?

Комментарии:

1. Вы сравниваете значение int value с char * именем.

Ответ №1:

Похоже, вы пытаетесь выполнить поиск по заданному значению. Поскольку ваш массив представляет собой n массив символов *, вам необходимо сравнить два символа * вместе, используя strcmp.

https://www.cplusplus.com/reference/cstring/strcmp/

В качестве дополнительного примечания, вы используете c , чтобы было больше смысла использовать std::string, чем char*

Комментарии:

1. Я переключил массив на std::string, мне все еще нужно использовать strcmp?

Ответ №2:

Вы должны адаптировать свою процедуру поиска к массиву символов:

 int linear_search( const char* array[], int size, const char* value) {
    for (int i = 0; i < size; i  ) {
        if ( ::strcmp( value, array[i] ) == 0 ) {
            return i;
        }
    }
    // Need to flag invalid or not found
    return -1; 
}