求一段C++小程序

我想从Edit里输入要一个想从下面的html源代码中找出出现几次的字符串,比如Wyoming,思路是先搜索标题里(就是Devils<B>Tower</B>National... 我想从Edit里输入要一个想从下面的html源代码中找出出现几次的字符串,比如Wyoming,思路是先搜索标题里(就是Devils <B>Tower</B> National Monument这部分)是否有这个字符串,如果有就count++,

如果没有就搜索网页片断里是否有,有就count++,没有就继续搜索下面的内容,这个页面一共有10条检索到的信息,就是想返回count的值,(注意字符串如果在标题和网页片断中都出现了算一次)
大家帮帮我吧,我对C++不熟,急!!!
补充:当输入想搜索的字符串后,从一个文本文件中读html源代码

<H2 class=r><A class=l onmousedown="return clk(0,'','','res','3','')"
href="http://volcano.und.edu/vwdocs/Parks/devils_tower/devils_tower.html"
target=_blank>Devils <B>Tower</B> National Monument</A></H2><TABLE cellSpacing=0

cellPadding=0 border=0>
<TBODY>
<TR>
<TD class=j><FONT size=-1><B>Devil's Tower</B>, Wyoming, a volcanic plug
or neck. In Kiowa Indian mythology it was said that: Once upon a time
seven little girls were playing in the woods

<B>...</B><BR></FONT></TD></TR></TBODY></TABLE></div><DIV class=g>
To飘渺世间天,你说的对。
能不能帮我做成这种形式:
因为我在C++builder6中运行,我也不知道怎么运行你的代码。所以能不能用OpenDialog打开我要搜索的html的文本文件,用memo显示出

字符串出现的次数?谢谢!
展开
 我来答
书未寻聚1w
2007-05-15 · TA获得超过2650个赞
知道大有可为答主
回答量:843
采纳率:0%
帮助的人:1190万
展开全部
while(getline(inf, strLine))
{
if(strLine.size() > 0)
strContent += strLine;
} 中strContent += strLine;是什么意思?谢谢!

strLine是html文档中的每一行,这句的意思是每读取一行就把它加入到strContent中,遇到空行不加入,这样可以不遗漏因转行而本分开的关键字。

我改了下,从书上抄了个case-insensitive的字符串traits,这样查找关键字就不分大小写了,有点理解你的意思了,你的意思是把多个html页面代码放在一个文本中,然后先在第1个页面的标题里找,找到的话count++,如果第1个页面的网页部分也有的话count就不增加,也就是说在同一个网页段(header 加 body)里如果关键字出现就只算一次是不是?

#pragma warning (disable: 4996) // 太多警告看着厌烦无视之
#include <iostream>
#include <fstream>
#include <string>
#include <cstddef>
#include <cstring>
#include <utility>
#include <map>
using namespace std;

struct ci_char_traits : public char_traits<char>
{
static bool eq(char c1, char c2)
{
return toupper(c1) == toupper(c2);
}
static bool lt(char c1, char c2)
{
return toupper(c1) < toupper(c2);
}
static int compare(const char* s1, const char* s2, size_t n)
{
return memicmp( s1, s2, n );
}
static const char* find(const char* s, int n, char a)
{
while( n-- > 0 && toupper(*s) != toupper(a) )
{
++s;
}
return n >= 0 ? s : 0;
}
};
typedef basic_string<char, ci_char_traits> ci_string;

istream& getline(istream& is, ci_string& cistr)
{
string temp;
getline(is, temp);
cistr = temp.c_str();
return is;
}

ostream& operator << (ostream& os, const ci_string& cistr)
{
os << cistr.c_str();
return os;
}

typedef const char* PCSTR;

bool SearchDetail(const ci_string& src, const ci_string& key)
{
//size_t uiCount = 0;
//size_t uiPrevPos = 0;
//size_t szLength = key.size();
//while((uiPrevPos = src.find(key, uiPrevPos)) != ci_string::npos)
//{
// ++uiCount;
// uiPrevPos += szLength;
//}
//return uiCount;
return src.find(key) != string::npos;
}

size_t KeyWordSearch(PCSTR szFileName, PCSTR szKeyWord)
{
ifstream inf(szFileName);

if(!inf)
{
cout << "File: " << szFileName << " not exist!\n";
return 0;
}

ci_string strContent;
ci_string strLine;
while(getline(inf, strLine))
{
if(strLine.size() > 0)
strContent += strLine;
}

size_t iHeadBeg;
size_t iCount = 0;
while((iHeadBeg = strContent.find("<H")) != string::npos)
{
size_t iHeadEnd = strContent.find("</H");
iHeadEnd = strContent.find(">", iHeadEnd) + 1;

// 把Header提取出来, 从总篇幅中删除
ci_string strHeader(strContent.begin() + iHeadBeg, strContent.begin() + iHeadEnd);
strContent.erase(strContent.begin() + iHeadBeg, strContent.begin() + iHeadEnd);

// size_t iCountHeader = SearchDetail(strHeader, ci_string(szKeyWord));

// 看是否存在
bool bInHeader = SearchDetail(strHeader, ci_string(szKeyWord));

// 定位Body
size_t iNextHeader = strContent.find("<H");
if(iNextHeader == string::npos)
iNextHeader = strContent.size();

// 把Body提取出来, 从总篇幅中删除
ci_string strBody(strContent.begin(), strContent.begin() + iNextHeader);
strContent.erase(strContent.begin(), strContent.begin() + iNextHeader);

// size_t iCountBody = SearchDetail(strBody, ci_string(szKeyWord));

// 看是否存在
bool bInBody = SearchDetail(strBody, ci_string(szKeyWord));

iCount += (bInHeader || bInBody);
}

return iCount;
}

int main()
{
cout << "Enter a file's name (include complete directory):\n";
ci_string strFileName;
getline(cin, strFileName);

cout << "Enter the keyword you want to search for:\n";
ci_string strKeyWord;
getline(cin, strKeyWord);

size_t iResult(KeyWordSearch(strFileName.c_str(), strKeyWord.c_str()));

cout << "The times of occurrence of keyword \"" << strKeyWord << "\" is: ";
cout << iResult << endl;
}
八角软件开发
2025-09-22 广告
如果您要开发微信小程序,可以按照以下步骤进行:1. 确定好微信小程序的定位和目的,包括行业、功能、内容、目标用户和目标市场等。2. 查看小程序AppID,并设置小程序信息。3. 下载并安装小程序开发者工具,进入后选择普通小程序开发,点击微信... 点击进入详情页
本回答由八角软件开发提供
kingstarer
2007-05-13 · TA获得超过584个赞
知道小有建树答主
回答量:516
采纳率:0%
帮助的人:556万
展开全部
以前做过类似的题,不过当时是简单处理,忽略<>中间的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
威尔成
2007-05-14 · TA获得超过210个赞
知道答主
回答量:25
采纳率:0%
帮助的人:0
展开全部
bust
破产的;一文不名的
be clean [dead] bust(穷得)一文不名
you are bust-you are bust
你破产了

sorry to trouble you
抱歉麻烦你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
的主宿B
2007-05-26 · TA获得超过190个赞
知道答主
回答量:109
采纳率:0%
帮助的人:0
展开全部
正学着html语言呢,。。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式