1

这是一些我想在字符串中找到所需子字符串块的代码:

#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]]'

当我使用索引方法时,一切都很好。我知道这一定是一个简单的错误,但我希望有人能指出。

4

3 回答 3

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

这是错的。您无法在 中找到stringstring使用std::find。只有性格。

你可以简单地使用

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

并通过创建迭代器

iter = s.begin() + pos;

如果pos不等于std::string::npos

于 2013-05-02T10:06:44.107 回答
1

迭代器std::string迭代字符,而不是字符串。

如果要"#STAGE"在字符串中查找,只需使用:

s.find("#STAGE");
于 2013-05-02T10:09:09.963 回答
0
 iter = std::find(iter, s.end(),"#STAGE");

std::find尝试比较char(提升为int) 和const char*(#STAGE)

find适用于容器的值类型。在字符串情况下,这是一个char. 所以你不能用它在 astring中找到 a string

例如这是有效的。

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

改用string:: find

size_t pos = s.find("#STAGE");
于 2013-05-02T10:07:31.703 回答