Поиск совпадения в двухмерном массиве
- Войдите на сайт для отправки комментариев
Вс, 19/12/2021 - 01:24
Подскажите пожалуйста, есть ли какая-то готовая функция поиска символов в двухмерном массиве?
То есть проверки совпадения последовательности, например из 4 символов.
char input_number[] {"6390"}; // последовательность символов для поиска char stored_numbers [][4]{ // массив char по 4-ре символа "1234", "5678", "4567", "7801", "6390", "7524" // ... и так далее }; bool find_number() { ... return true; // совпадение есть return false; // нет } int find_number_index() { ... return ... ; // номер совпавшей ячейки массива }
Как это можно реализовать проще всего? Подскажите пожалуйста!
проще реализовать - последовательным просмотром. А эффективнее сначала отсортировать исходный массив
Для настоящего двухмерного массива - цикл с memcmp. Тут ты какую-то чушь написал.
А что она должна выдавать?
самый простой вариант: true или false, то есть найдено совпадение или нет
Ага, т.е. Вам не интересует позиция, Вам важно только найдено или нет?
Ну, тогда забудьте, что это массив и "скольки он мерный", просто ищите в той памяти, которую он занимает точно также как бы подстроку в строке искали бы.
Спасибо всем, кто помог! Наконец-то разобрался с функцией memcmp Мой вариант кода:
Может, кто-то знает, как написать ещё проще?
Я с memcmp не работал и не знаю верно ли с ней реализация у вас, однако ж в 37 строке у вас ошибка - нулевой элемент массива у вас совпадает с признаком - не найдено.
Ну а лично я (для себя) не стал бы "код раздувать", а сделал бы вот так:
Ну и если количество элементов массива заведомо всегда меньше 127, то для экономии памяти еще вот так (не проверял и за работоспособность не могу отвечать):
Да, про возможное совпадение с нулевым элементом массива я не подумал! Большое спасибо, что указали на ошибку! Теперь я понимаю, почему из функции при отсутствии совпадений нужно возвращать не 0, а -1!
А если использовать uint8_t (беззнаковый тип), тогда количество элементом может быть 256, то есть от 0 до 255?
Но тогда ты не сможешь вернуть из функции «-1», понимашшшш куды клоню?). А вообще это все от задачи зависит, то есть если у тебя заведомо больше 127 элементов массива, то никто не заставляет экономить байты на этом - используй int16_t просто и все ))).