Поиск по начальной букве

Здрасьте, друзья. У меня возникла проблема. Мне нужно организовать поиск по введённой букве в массиве слов. То есть введена буква 'А', а поиск выдаёт все слова на букву А из массива. Помогите, пожалуйста, как это можно сделать?

«Массив слов» — это понятно, а слова хранятся в виде чего? Массива символов (char) или в объектах класса string? Или ещё в чём-то?

Кодировка символов в массиве слов и введённой буквы совпадают?

1.Вообще, обычно принято выкладывать свой вариант кода.
2.Мне кажется, что организовывать поиск по массиву, не совсем целесообразно, поэтому лучше сделать поиск в файле. Получается что-то вроде «взрослой» базы данных.
3.Вот моя реализация:

#include <iostream>
#include <conio.h>
#include <fstream>
#include <vector>
#include <cctype>
#define MaxLenght 256

using namespace std;

int main()
{
    setlocale ( 0, "Russian" );
    char filename[MaxLenght];
        char controlchar;
    cout << "Введите имя файла: ";
    cin.get( filename, MaxLenght );
    cin.ignore();
    ifstream file( filename, ios::in | ios::binary );
    if ( file.is_open() )
    {
        cout << "Введите первую букву: ";
        controlchar = getche();
        cout << endl;
        char chr;
        vector<char> word;
        while ( file.read ( &chr, 1 ) )
        {
            if ( isalnum ( chr ) )
                word.push_back ( chr );
            else
                if ( word[0] == controlchar )
                {
                   for ( int i = 0; i < word.size(); i++ )
                       cout << word[i];
                   cout << endl;
                   word.clear();
                }               
        }
    }
    else
        cout << "Не удалось открыть файл!" << endl;
        #ifdef _WIN32
        getch();
        #endif
    return 0;
}

Нужно пояснять код?

porshe, мне кажется, что в данном случае, Слава новичок не знает как подступиться к решению задачи. Поэтому своего варианта кода у него ещё нет.

Поэтому я задал уточняющие вопросы.

На счёт «взрослой» базы данных — это ты погорячился ))) Кстати, СУБД действительно хранят данные на диске. Но за каждым чихом они к диску не обращаются — слишком медленно, а держат необходимый объём информации в памяти (в кэше). Так что «где искать» — это ещё очень большой вопрос )))

По поводу реализации.

(1) Обязательное условие: слова в файле (кириллица) должны быть записаны в кодировке cp-866 (при работе под Windows).

(2) Функция (макрос) isalnum() может неправильно реагировать на не-латиницу. Зависит от очень многих условий.

(3) Переменную filename лучше делать как string. В Windows раньше вроде было ограничение на длину полного имени файла (с путём) в 256 символов. Но его как-то не очень сильно придерживались. А в *nix, кажется, вообще нет такого ограничения (линуксоиды, я прав?).

(4) Почему ты использовал для word вектор? Логичнее string. Да и в cout выводить проще.

Спасибо вам конечно огромное за труд, но видимо мой уровень способен только на перебор с 26 вариантами букв англ языка -_-
Ладно, оставлю пока что эту тему, но у меня есть вопрос.
На Win XP кодировка иная, нежели на Win 7? Если да, то как устранить проблему с кракозябрами при выводе в программе, написанную на 7, а открытую на хп?
Спасибо

В винде, начиная с ветхозаветной Win95, ничего не поменялось: под GUI используется cp-1251, для консоли — cp-866.

Если не ошибаюсь, в XP надо поставить в Control Panel -> Regional and Language Options -> Advanced -> Language for non-Unicode programs -> Russian.

Слава новичок не знает как подступиться к решению задачи. Поэтому своего варианта кода у него ещё нет.

это я на будущее)

На счёт «взрослой» базы данных — это ты погорячился

Я знаю, это была шутка))

Да, string использовать легче, просто я недавно изучил vector и почему-то мой мозг зациклился на этом, и мне как-то не подумалось

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.