Вопрос

У меня есть эта переменная direpath2, где я храним самое глубокое название каталога пути:

typedef std::basic_string<TCHAR> tstring;
tstring dirPath = destPath;
tstring dirpath2 = dirPath.substr(destPathLenght - 7,destPathLenght - 1);

Я хочу уметь сравнить это другую строку, что-то вроде:

if ( _tcscmp(dirpath2,failed) == 0 )
{
...       
}

Я пробовал много вещей, но ничего не работает. Может кто-нибудь сказать мне, как это сделать или что я делаю не так?

Пожалуйста, имейте в виду, я знаю почти рядом с C ++, и все это ведет меня безумно.

спасибо заранее

Это было полезно?

Решение

std::basic_string<T> есть перегруженные operator==, попробуй это:

if (dirpath2 == failed)
{
...
}

В качестве альтернативы вы можете поделать это. Так как std::basic_string<T> не имеет неявный оператор преобразования в const T*, вам нужно использовать c_str Функция участника для преобразования в const T*:

if ( _tcscmp(dirpath2.c_str(), failed.c_str()) == 0 )
{
...
}

Другие советы

Почему вы используете _tcscmp С строкой C ++? Просто используйте его встроенный оператор равенства:

if(dirpath2==failed)
{
    // ...
}

Посмотрите на предоставленные Операторы сравнения а также методы Это можно использовать с строками STL.

В целом, если вы используете строки C ++, вам не нужно использовать строковые функции C; Однако, если вам нужно передать строки C ++ к функциям, которые ожидают, что C-Strings вы можете использовать c_str() метод получить const C-String с содержанием указанного строкового экземпляра C ++.

Кстати, если вы знаете, почти рядом с C ++ ", вы должны В самом деле Получите книгу C ++ и прочитайте ее, даже если вы пришли из C.

STD :: Basic_String имеет оператор ==. Используйте шаблон классов строки:

if (dirpath2 == failed)
{
...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top