这里有一些我希望在字符串中找到所需子字符串块的代码:
#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]]'
当我使用索引方法时,一切都很好。我明白这一定是一个简单的错误,但我希望有人可以指出。
答案 0 :(得分: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
。
答案 1 :(得分:1)
std::string
迭代器迭代字符,而不是字符串。
如果您想在字符串中查找"#STAGE"
,只需使用:
s.find("#STAGE");
答案 2 :(得分: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");