Mercurial > hg > Members > e085722 > Cerium
view example/test/ppe/Exec.cc @ 0:04e28d8d3c6f
first commit
author | Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Nov 2010 01:23:25 +0900 |
parents | |
children | 2f90ce50a0af |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include "Exec.h" #include "Func.h" #include "WordGrep.h" /* これは必須 */ SchedDefineTask(Exec); int str_search(char *r_data,char *sstr,int point); //実際のタスク内での処理 static int run(SchedTask *s, void *rbuf, void *wbuf){ int *o_data = (int*)wbuf; char *r_data = (char *)rbuf; char sstr[10] = "the"; int len_r_data = (int)strlen(r_data); int len_sstr = (int)strlen(sstr); printf("%s : %s\n",sstr,r_data); int search = 0; int s_next = 0; int hits = 0; while(search+len_sstr <= len_r_data){//残り検索文字列が検索文字列より少なくなるまで s_next = len_sstr;//ヒットしない場合は検索文字の文字数分進む for(int i = 0;i<len_sstr;i++){ if(sstr[len_sstr-i-1] == r_data[len_sstr+search-1]){//1文字だけ比較する if(i == 0){//検索文字の末尾だった場合 if(strncmp(r_data+search,sstr,len_sstr) == 0){//文字列が一致した場合 //表示部分 printf(" hit!->"); for(int j = 0;j < 10;j++){ if(r_data[search+j] == 0){ break; }else if(r_data[search+j] == '\n') { s->printf(" "); }else{ s->printf("%c",r_data[search+j]); } } printf("\n"); hits++; break; } }else{//1文字だけヒットした場合 s_next = i;//その文字分だけ進む } } } search += s_next; } o_data[0] = hits; return 0; }