例如,假设我有这个字符串:
"Name, Name2, <b>Name3</b>, Name4, <b>Name5</b>"
我想在<b>
标签内获取任何值/名称。因此,当我搜索char时,我在数组中得到以下内容:
Name3
Name5
有什么想法吗?感谢
答案 0 :(得分:4)
对于这种类型的字符串搜索/匹配方法,只需使用boost regex。
答案 1 :(得分:1)
这是一个仅使用STL的基本版本,它假定标签没有嵌套或行为不当
#include <iostream>
#include <string>
#include <vector>
int main()
{
const std::string TAG_OPEN( "<b>" );
const std::string TAG_CLOSE( "</b>" );
const std::string s( "Name, Name2, <b>Name3</b>, Name4, <b>Name5</b>" );
typedef std::vector< std::string > StringArray;
StringArray tagContents;
std::string::size_type index = 0;
while( index != std::string::npos )
{
const std::string::size_type o = s.find( TAG_OPEN, index );
if ( o == std::string::npos )
{
break;
}
const std::string::size_type c = s.find( TAG_CLOSE, index );
if ( c == std::string::npos )
{
// mismatched tag, ignore?
break;
}
const std::string::size_type tagContentsStart = o + TAG_OPEN.size();
const std::string::size_type tagContentsFinish = c;
tagContents.push_back(
s.substr( tagContentsStart
, tagContentsFinish - tagContentsStart ) );
index = c + TAG_CLOSE.size();
}
for ( StringArray::const_iterator S = tagContents.begin();
S != tagContents.end();
++S )
{
std::cout << *S << std::endl;
}
return 0;
}
答案 2 :(得分:0)
start = strstr(s, "<b>")+3;
stop = strstr(start, "</b>");
strncpy(result, start, stop-start);
不要忘记添加错误检查。
后续比赛,对于懒人:
s = stop+3;
再次执行上述代码。
[编辑]停止/错误检查:检查strstr的返回码。
答案 3 :(得分:0)
如果您拒绝使用std::string
并坚持使用C风格的字符串,您可以始终冒险并使用strtok
。它具有修改文本字符串的功能。
请在使用前了解strtok
的副作用。
我仍然强烈建议您使用字符std::string
,然后使用std::string
进行解析。 std::string
的功能比使用C风格的字符串要多得多。