Сравните строку wchar из вектора с другой указанной строкой wchar

@pmr: посмотрите на код ниже

@singeroftheall: У меня проблемы с обеими вещами. Вставка и поиск. Я думаю, что поисковая часть завершена. Теперь, как я могу вставить свои адреса Mac в вектор? Мои адреса сохраняются в переменной m_device_info.Adress.rgBytes[]; Смотри ниже.

    wprintf(L"\t\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5]);

Можно ли смешивать языки C и C++? Потому что векторный вывод находится в С++?

================================================== ================================ Я написал код, который показывает мне все доступные устройства Bluetooth. Я просто хочу сохранить все MAC-адреса (тип: wchar) доступных устройств в векторном списке. После этого я хочу найти указанный wchar, если он есть в списке векторов.

Я не профессиональный программист на c/c++, и мне это просто нужно, чтобы сравнить что-то для демонстрации и посмотреть, работает ли моя идея. Я был бы очень рад и счастлив, если кто-то может мне помочь. Я также искал в Google и писал в других часто задаваемых вопросах, но не нашел хорошего решения, которое мне помогло.

CODE для поиска устройств:

#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <bthdef.h>
#include <BluetoothAPIs.h>
#include <iostream>
#include <vector>

using namespace std;
#pragma comment(lib, "Irprops.lib")

BLUETOOTH_FIND_RADIO_PARAMS m_bt_find_radio = {
    sizeof(BLUETOOTH_FIND_RADIO_PARAMS)
};

BLUETOOTH_RADIO_INFO m_bt_info = {
    sizeof(BLUETOOTH_RADIO_INFO),
    0
};

BLUETOOTH_DEVICE_SEARCH_PARAMS m_search_params = {
    sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS),
    1,
    0,
    1,
    1,
    1,
    15,
    NULL
};

BLUETOOTH_DEVICE_INFO m_device_info = {
    sizeof(BLUETOOTH_DEVICE_INFO),
    0
};

HANDLE m_radio = NULL;
HBLUETOOTH_RADIO_FIND m_bt = NULL;
HBLUETOOTH_DEVICE_FIND m_bt_dev = NULL;

int wmain(int argc, wchar_t **args) {
    while(true) {
        m_bt = BluetoothFindFirstRadio(&m_bt_find_radio, &m_radio);
        int m_radio_id = 0;
        do {
            m_radio_id++;

            BluetoothGetRadioInfo(m_radio, &m_bt_info);

            wprintf(L"Radio %d:\r\n", m_radio_id);
            wprintf(L"\tName: %s\r\n", m_bt_info.szName);
            wprintf(L"\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_bt_info.address.rgBytes[1], m_bt_info.address.rgBytes[0], m_bt_info.address.rgBytes[2], m_bt_info.address.rgBytes[3], m_bt_info.address.rgBytes[4], m_bt_info.address.rgBytes[5]);
            wprintf(L"\tClass: 0x%08x\r\n", m_bt_info.ulClassofDevice);
            wprintf(L"\tManufacturer: 0x%04x\r\n", m_bt_info.manufacturer);

            m_search_params.hRadio = m_radio;

            ::ZeroMemory(&m_device_info, sizeof(BLUETOOTH_DEVICE_INFO));
            m_device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);

            m_bt_dev = BluetoothFindFirstDevice(&m_search_params, &m_device_info);

            vector <string> macadresse;
            int n;
            int m_device_id = 0;
            do {
                m_device_id++;
                wprintf(L"\tDevice %d:\r\n", m_device_id);
                wprintf(L"\t\tName: %s\r\n", m_device_info.szName);
                wprintf(L"\t\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5]);
                wprintf(L"\t\tClass: 0x%08x\r\n", m_device_info.ulClassofDevice);

                //devicemc[m_device_id]= m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5];
                //macadresse.push_back(string (&m_device_info.Address.rgBytes[0], &m_device_info.Address.rgBytes[1], &m_device_info.Address.rgBytes[2], &m_device_info.Address.rgBytes[3], &m_device_info.Address.rgBytes[4], &m_device_info.Address.rgBytes[5]));

            } while(BluetoothFindNextDevice(m_bt_dev, &m_device_info));
            BluetoothFindDeviceClose(m_bt_dev);

        } while(BluetoothFindNextRadio(&m_bt_find_radio, &m_radio));
        BluetoothFindRadioClose(m_bt);
        Sleep(10000);
    }
    return 0;
}

person Kipcak08    schedule 27.07.2012    source источник
comment
Можете ли вы сократить код вашей реальной проблемы? Ни один из материалов Bluetooth не кажется связанным.   -  person pmr    schedule 27.07.2012
comment
У вас есть проблема со вставкой строк внутри вектора? Или просто с поиском некоторой строки в векторе?   -  person SingerOfTheFall    schedule 27.07.2012
comment
Я думаю, вы на правильном пути. Если вы используете wchar_t, вы также должны использовать wstring и vector<wstring>.   -  person Bo Persson    schedule 27.07.2012
comment
У меня с обеими вещами проблемы. Поиск вещь решена, я думаю. Но как я могу вставить его сейчас?   -  person Kipcak08    schedule 27.07.2012


Ответы (1)


Прежде всего: символы в string относятся не к типу wchar, а к типу char. Вероятно, вам нужен vector<wstring>. Чтобы найти wstring в vector:

#include <algorithm>
#include <vector>
#include <string>
using namespace std;

vector<wstring> vec;
// insert something
vec.push_back(wstring("my_string"));

// search something
vector<wstring>::iterator it = std::find(vec.begin(), vec.end(), wstring("needle"));
if(it != vec.end()) {
  cout << "Found it" << '\n';
} else {
  cout << "Not found" << '\n';
}
person pmr    schedule 27.07.2012
comment
@pmr: Посмотрите на код ниже. @singeroftheall: У меня проблемы с обеими вещами. Вставка и поиск. Я думаю, что поисковая часть завершена. Теперь, как я могу вставить свои адреса Mac в вектор? Мои адреса сохраняются в переменной m_device_info.Adress.rgBytes[]; Смотри ниже. wprintf(L\t\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n, m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info. Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5]); - person Kipcak08; 27.07.2012
comment
@ user1557170 Я добавил необходимые включения и пример вставки. Пожалуйста, не редактируйте комментарии в ответы. Используйте комментарии. Кроме того, пожалуйста, ознакомьтесь с часто задаваемыми вопросами SO, чтобы познакомиться с сайтом. - person pmr; 27.07.2012