English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

// AA923861.cpp : 定義主控台應用程式的進入點。
//

#include \"stdafx.h\"
#include
#include

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream inFile(\"網頁原始檔.txt\",ios::in);

if(!inFile){
cout<<\"Failed yo open file\"< exit(1);
}

const int bufSize=400;

char buffer[400];

ofstream outFile(\"砍站.txt\",ios::out);

while(inFile.getline(buffer, bufSize, \'\\n\')){

cout<
outFile< }

system(\"PAUSE\");

return 0;
}

這是我所寫的程式,可是只會複製全部的原始黨,我只想要超連結的部分就好,誰可以幫幫我,如果成功,贈送20點

2006-03-05 14:56:32 · 3 個解答 · 發問者 阿耀 1 in 電腦與網際網路 程式設計

3 個解答

這一題好像有人問過了,所以我就再貼一次我的部分。
我稍微修改了一下你的輸入輸出介面,我用我自己比較熟悉的語法。
剩下的,主要有幾個部分說一下。

要決定一個超連結的開始,會去比對整個字串,找到 "www.", or "http::" ....
這個可以自己定義。這個比對的部分,另外寫了一個function
找到開始後,把那個字串抓下來,然後去找結束。
我定義了一些結束的char,像是 < > ( ) ; " .....這個也是可以自己定義

擷取出來後,就只是丟到檔案去了


以下是我的檔案

#include
#include
#include
#include "genlib.h"

#define SIZE_S3
#define SIZE_E9
int FindMatch(string target, string line){
bool result;
if(target == "")return true;
for(int i = 0 ; i < line.length() ; i++){
if(line.substr(i, target.length()) == target)return i;
}
return -1;
}


int main()
{
ifstream inFile;//w19.txt是網頁
inFile.open("123.txt");
if(inFile.fail()){
cout << "Can't open file" << endl;
exit(1);
}


string buffer;
int bufSize = 1000;
ofstream outFile("456.txt", ios::out);//456.txt是存網頁中超連結的地方

string LinkStart[SIZE_S]={"http:", "www.", "tw."};
char LinkEnd[SIZE_E]={';','>','<',')','(',' ','"','{','}'};
while(1){
getline(inFile, buffer);
if(inFile.fail())break;
//cout< //outFile< string findLink;
for(int i = 0 ; i < SIZE_S ; i++){
while(buffer != ""){
int index = FindMatch(LinkStart[i], buffer); // Find the start of hyper link
if(index != -1){
buffer = buffer.substr(index);
int space = bufSize;
for(int j = 0 ; j < SIZE_E ; j++){// Find the end of hyper link
int temp = buffer.find(LinkEnd[j]);
if(temp != -1 && temp < space)space = temp;
}
if(space == string::npos){
findLink = buffer;
outFile << findLink << endl;
break;
}
else{
findLink = buffer.substr(0,space);
outFile << findLink << endl;
buffer = buffer.substr(space + 1);
}
}
else break;
}
}
}
return 0;
}

以下試測的結果,我把我回答問題的這一個網頁原始碼copy下來,然後用我的程式跑的結果 看起來應該是沒什麼問題吧
http://tw.yimg.com/i/tw/ks/b5.css
http://tw.rd.yahoo.com/referurl/srch/search/kp/*http://tw.search.yahoo.com/search
....太多了,印不下去了

2006-03-08 18:35:28 · answer #1 · answered by jeffrey 3 · 0 0

title

2006-03-07 00:13:29 · answer #2 · answered by Anonymous · 0 0

跟我的寫法不同但是還是給你指點
用getc指令或gets一個字一個字讀
判斷資料陣列
Html語法連結為src=" "
假設x[256]讀近來的資料
while (getc(x) != EOF)
{
if (x[0] == "s")
{
if(x[1]== "r")
{
if(x[2]=="c")
{
......
以此類推到後直接跑圖取資料的回圈
在判對是否讀到資料尾端不是就繼續跑
讀到"跳出或是你的檔尾例如JPG或是其他的

}
}
}
}
因為我不想寫太多所以指導原理
剩下靠你自己

2006-03-09 03:32:48 補充:
樓上的大大補充的太好了
我很久沒有寫HTML很多都望光了

2006-03-06 03:36:41 · answer #3 · answered by 永恆的破壞 5 · 0 0

fedest.com, questions and answers