[問題] 搜尋網頁裡的關鍵字 在統計關鍵字的次數
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
這個程式大致上是從
"http://www-cs-faculty.stanford.edu/~knuth/taocp.html"
網頁裡 搜尋"volume"然後顯示出來
不過他跳出來的是有幾個"volume"一一把他列出來
有六個的話ex:
volume
volume
volume
volume
volume
volume
以下是程式碼
------------------------------------------------------------------
#pragma comment(lib, "WS2_32")
#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PORT 6666
#define FENGYUN_IP "207.182.234.180"
#define GOOGLE_IP "72.14.207.99"
#define CSDN_IP "211.100.26.124"
#define NYIST_IP "202.102.240.77"
#define MAX_PACKET_SIZE (1024*20)
bool parser (char *url, char *host, char *dir)
{
int i;
for (i = 0; url == "http://" && i < sizeof ("http://"); i++);
if (i >= sizeof ("http://")) {
printf ("no http://\n");
return false;
}
for (; url && url != '/'; i++)
*host++ = url;
*host = '\0';
for (; url; i++)
*dir++ = url;
*dir = '\0';
return true;
}
void findhref (char *buf)
{
char href[4] = {'h', 'r', 'e', 'f'};
char hrefbig[4] = {'H', 'R', 'E', 'F'};
char url[128];
while (*buf) {
for (int i = 0; i <= 7 && buf; ++i);
if (i <= 7) break;
if (*(int *)buf == *(int *)href || *(int *)buf == *(int *)hrefbig) {
int i = 0;
for (buf += 6; buf[0] && buf[0] != '\'' && buf[0] != '"' && buf[0] != '>'; buf++, i++)
url = buf[0];
url = '\0';
printf ("%s\n", url);
}
buf++;
}
}
void findword (char *buf, char *word)
{
while (*buf) {
if (buf[0] == '<')
while (buf[0] != '>' && buf[0])
buf++;
char *p = word;
while (*buf == *p && buf[0] && p[0])
buf++, p++;
if (*p == '\0')
printf ("%s\n", word);
buf++;
}
}
int main ()
{
SOCKET g_sClient;
char g_szBuff[MAX_PACKET_SIZE + 2];
WSADATA wsaData;
WORD socketVersion = MAKEWORD(2, 2);
if (WSAStartup(socketVersion, &wsaData) != 0)
{
printf("Init socket dll error\n");
}
if (SOCKET_ERROR == (g_sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)))
{
printf("Init Socket Error!\n");
}
HOSTENT *hptr;
char *url = "http://www-cs-faculty.stanford.edu/~knuth/taocp.html";
char host[64], dir[128];
parser (url, host, dir);
if ((hptr = gethostbyname(host)) == NULL) {
printf("gethostbyname error for host:%s\n", dir);
}
printf ("ip:%s\n", inet_ntoa( *(IN_ADDR*)hptr->h_addr_list[0]));
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(80);
servAddr.sin_addr.S_un.S_addr = inet_addr(inet_ntoa( *(IN_ADDR*)hptr->h_addr_list[0]));
if (INVALID_SOCKET == (connect(g_sClient, (sockaddr*)&servAddr, sizeof(sockaddr_in))))
{
printf("Connect to Server Error!\n");
}
char buf[256] = "0";
sprintf (buf, "GET %s \nHOST:%s \n\n", dir, host);
if (SOCKET_ERROR == send(g_sClient, buf, sizeof(buf)+1, 0))
{
printf("Send File Name Error!\n");
}
int nRecv;
do {
nRecv = recv(g_sClient, g_szBuff, MAX_PACKET_SIZE+1, 0);
g_szBuff[nRecv] = '\0';
findword (g_szBuff, "volume");
}
while (nRecv > 0);
closesocket(g_sClient);
WSACleanup();
system ("pause");
return 0;
}
希望得到的正確結果:
不過我想把它改成跑出來六個的話 他會顯示 volume*6 之類的
不過很多地方都還看不懂
有大大可以幫幫忙嗎
如果可以的話 順便解釋一下一些地方有什麼用途
拜託啦
程式跑出來的錯誤結果:
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
Dev-C++
有問題的code: (請善用置底文標色功能)
補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.192.80
→
02/20 22:38, , 1F
02/20 22:38, 1F
→
02/20 22:39, , 2F
02/20 22:39, 2F
→
02/20 23:04, , 3F
02/20 23:04, 3F
→
02/21 01:42, , 4F
02/21 01:42, 4F
→
02/21 01:43, , 5F
02/21 01:43, 5F
→
02/21 01:57, , 6F
02/21 01:57, 6F
→
02/21 01:57, , 7F
02/21 01:57, 7F
→
02/21 02:05, , 8F
02/21 02:05, 8F
推
02/21 02:51, , 9F
02/21 02:51, 9F
→
02/21 02:51, , 10F
02/21 02:51, 10F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章