2013-05-02 3 views
1

вот некоторые коды, которые я хочу, чтобы найти нужный блок подстроки в строке:ошибка: ISO C++ запрещает сравнение между указателем и целое

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

... 
unsigned int stage = 3; 
string::iterator iter = s.begin(); 
string::iterator iter_next = s.end(); 

for (unsigned int i=0; i<stage; i++) { 

    iter = std::find(iter, s.end(),"#STAGE"); 

} 
    iter_next = std::find(iter, s.end(), "#STAGE"); 

string sub = string(iter, iter_next); 
... 

Я выбрал возвращение итератора вместо индекса. Тем не менее, отладка дает мне это:

error: ISO C++ forbids comparison between pointer and integer. 

c:\qtsdk\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_algo.h:-1: 
In function '_RandomAccessIterator std::__find(_RandomAccessIterator, _RandomAccessIterator, 
const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = 
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, _Tp = char [7]]': 
c:\qtsdk\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_algo.h:4224: instantiated 
from '_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = 
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, _Tp = char [7]]' 

Все, что я использую метод индекса. Я понимаю, что это должна быть простая ошибка, но я надеюсь, что кто-то может указать.

ответ

5
iter = std::find(iter, s.end(),"#STAGE"); 

Это не так. Вы не можете найти string в string, используя std::find. Только персонаж.

Вы можете просто использовать

size_t pos = s.find("#STAGE"); 

и создать итератор на

iter = s.begin() + pos; 

если pos не равна std::string::npos.

+0

Спасибо, человек! Это то, что я хочу для итератора. – colddie

0
iter = std::find(iter, s.end(),"#STAGE"); 

std::find пытается сравнить char (продвигаемые в int) и const char* (#STAGE)

find работ по типов значений контейнеров. В строковом случае это char. Поэтому вы не можете использовать его, чтобы найти string в string.

Например, это действительно.

iter = std::find(iter, s.end(), 'A'); 

Использование string::find вместо

size_t pos = s.find("#STAGE"); 
1

A std::string итераторов перебирает символов, а не строки.

Если вы хотите посмотреть на "#STAGE" в вашей строке, просто используйте:

s.find("#STAGE"); 
Смежные вопросы