Сравнение строк C ++ - PullRequest
       11

Сравнение строк C ++

2 голосов
/ 18 октября 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 18 октября 2010

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 )
{
...
}
5 голосов
/ 18 октября 2010

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

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

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

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

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

1 голос
/ 18 октября 2010

std :: basic_string имеет оператор ==. Используйте шаблон строки classs:

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