Как проверить, содержит ли _bstr_t (аналогично str.find) строку - PullRequest
0 голосов
/ 06 октября 2011

Я новичок в _bstr_t и все еще пытаюсь освоить его. Я пытался проверить, содержится ли конкретная строка x где-либо в пределах строки bstring. Что-то, что я обычно хотел бы сделать;

String x = "hello";
String example = "You! hello there";
...
if (example.find(x) != string::npos) {
...

Просто для записи предполагаемая платформа Windows.

Ответы [ 2 ]

3 голосов
/ 06 октября 2011

Нет необходимости использовать _bstr_t. Используйте тип BSTR.

Далее прочитайте Полное руководство Эрика по семантике BSTR .

Наконец, вы можете использовать BSTR в нативном коде так же, как в обычном символьном массиве в большинстве случаев.

BSTR bstr = SysAllocString(L"FooBarBazQux");
if (wcsstr(bstr, L"Bar") != NULL) {
  // Found it! Do something.
} else {
  // Not there.
}
SysFreeString(bstr);

MSDN для wcsstr .

1 голос
/ 09 октября 2011

Ваш пример, кажется, пытается использовать string :: find из STL. Но вы указываете свои переменные типа «Строка» (с большой буквы). Если вы вместо этого сделали:

using namespace std;
string x = "hello";
string example = "You! hello there";
...

ваш пример будет скомпилирован. У вас есть BSTR или _bstr_t, с которыми вам нужно работать, но которые вы не показали? Даже если это так, довольно просто создать std :: string из _bstr_t, и после этого вы можете использовать STL, как обычно.

...