STL を使って vector<string> に格納したテキストのないようから
特定の文字列を含んでいる場合、真を返し、イテレータで受け取り
そのイテレータをインクリメンタルすることで、特定の文字列を含んだ
内容を全部、出力した。
ここでは、特定の文字列を 「<a href="https://tsundora.com/」としている
「実行結果」
[INFO]STEP2: 0001/0001
STEP3 各トップページから番号を取り出します。
(INFO) 検索 HIT <ul id="menu-%e3%83%a1%e3%82%a4%e3%83%b3%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc" class="menu"><li id="menu-item-243822" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-243822"><a href="https://tsundora.com/alist">繧「繝九Γ螢∫エ吶Μ繧ケ繝・/a></li>
FIND:<ul id="menu-%e3%83%a1%e3%82%a4%e3%83%b3%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc" class="menu"><li id="menu-item-243822" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-243822"><a href="https://tsundora.com/alist">繧「繝九Γ螢∫エ吶Μ繧ケ繝・/a></li>
FIND:<li id="menu-item-112236" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-112236"><a href="https://tsundora.com/artist">繧「繝シ繝・ぅ繧ケ繝・/a></li>
FIND:<li id="menu-item-175902" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-175902"><a href="https://tsundora.com/pools">繝励・繝ォ</a></li>
FIND:<li id="menu-item-112659" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-112659"><a href="https://tsundora.com/keyword">莠コ豌励Ρ繝シ繝・/a></li>
FIND:<li id="menu-item-43608" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43608"><a target="_blank" href="http://kjgame.sakura.ne.jp/rank/animewall/ranklink.cgi?id=otachan">螢∫エ吶Λ繝ウ繧ュ繝ウ繧ー</a></li>
FIND:<div class="clear"></div>
FIND:</div><!--//header_menu-->
FIND: <div class="clear"></div>
FIND: <div class="clear"></div>
FIND: </div><!--//container-->
FIND: </div><!--//header_top_cont-->
FIND:<a href="https://tsundora.com" title="tsundora.com"><img src="https://tsundora.com/wp-content/themes/TsundoraTheme/images/logo.svg" alt="tsundora.com"></a>
FIND:<h2>鬮倩ァ」蜒丞コヲ繝サ鬮倡判雉ェ縺ェ繧「繝九Γ・・ご繝シ繝螢∫エ・/h2>
=========================================================================================
以下がソースコード(抜粋)です。
cpp
1 2bool 検索(string szString) 3{ 4 char* p; 5 char szBuff[DEF_BUFFSIZE]; 6 strcpy_s(szBuff, szString.c_str()); 7 p = strstr(szBuff, "<a href=\"https://tsundora.com/"); 8 if (p) 9 { 10 printf("(INFO) 検索 HIT %s", szBuff); 11 } 12 if (p) 13 return true; 14 else 15 return false; 16} 17//=============================================== 18// 各トップページから番号を取り出す 19void Dic_Step3() 20{ 21 printf("STEP3 各トップページから番号を取り出します。\n"); 22 23 24 vector<string> vText; 25 26 int i; 27 for (i = 1; i <= g_NUM; i++) 28 { 29 char szFile[80]; 30 sprintf_s(szFile, "top%04d%s", i, ".dat" ); 31 32 // ファイルの内容を vText に保存 33 Dic_ReadFile(szFile, &vText); 34 vector<string>::iterator p; 35 36 // テキストの内容が vText に入っているので 関数「検索」で真偽判定をしてループで 37 // 「検索」で true の値を返す イテレータの内容を出力する。 38 p = find_if(vText.begin(), vText.end(), 検索 ); 39 if (p != vText.end()) 40 { 41 while (p != vText.end()) 42 { 43 char szBuff[DEF_BUFFSIZE]; 44 strcpy_s(szBuff, p->c_str()); 45 if( strlen(szBuff) > 20 ) 46 printf("[FIND]:%s\n", szBuff ); 47 p++; 48 } 49 } 50 vText.clear(); 51 } 52} 53
(INFO) 検索 HIT が一件しかでなくて、特定の文字列を含んでいない文字列も
イテレータが運んでくるので、どこが悪いのでしょうか?
環境
OS:Windows10 Pro
IDE:Visual Studio 2019 Commnity
C/C++ STL
#include<algorithm>
望む結果
(INFO 検索 HIT: xxxx 1件目
(INFO 検索 HIT: xxxx 2件目
..
..
(INFO 検索 HIT: xxx 終了
特定の文字列を含んだ文字列のみを抽出したい。
それをイテレータを使って、先頭から末尾まで表示(格納)したい。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/24 11:04