#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;
}