Mercurial > hg > Members > e085722 > Cerium
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:04e28d8d3c6f |
---|---|
1 #include <stdio.h> | |
2 #include <string.h> | |
3 #include "Exec.h" | |
4 #include "Func.h" | |
5 #include "WordGrep.h" | |
6 | |
7 /* これは必須 */ | |
8 SchedDefineTask(Exec); | |
9 int str_search(char *r_data,char *sstr,int point); | |
10 | |
11 //実際のタスク内での処理 | |
12 static int run(SchedTask *s, void *rbuf, void *wbuf){ | |
13 int *o_data = (int*)wbuf; | |
14 char *r_data = (char *)rbuf; | |
15 char sstr[10] = "the"; | |
16 int len_r_data = (int)strlen(r_data); | |
17 int len_sstr = (int)strlen(sstr); | |
18 printf("%s : %s\n",sstr,r_data); | |
19 int search = 0; | |
20 int s_next = 0; | |
21 int hits = 0; | |
22 while(search+len_sstr <= len_r_data){//残り検索文字列が検索文字列より少なくなるまで | |
23 | |
24 s_next = len_sstr;//ヒットしない場合は検索文字の文字数分進む | |
25 | |
26 for(int i = 0;i<len_sstr;i++){ | |
27 if(sstr[len_sstr-i-1] == r_data[len_sstr+search-1]){//1文字だけ比較する | |
28 if(i == 0){//検索文字の末尾だった場合 | |
29 if(strncmp(r_data+search,sstr,len_sstr) == 0){//文字列が一致した場合 | |
30 //表示部分 | |
31 printf(" hit!->"); | |
32 for(int j = 0;j < 10;j++){ | |
33 if(r_data[search+j] == 0){ | |
34 break; | |
35 }else if(r_data[search+j] == '\n') { | |
36 s->printf(" "); | |
37 }else{ | |
38 s->printf("%c",r_data[search+j]); | |
39 } | |
40 } | |
41 printf("\n"); | |
42 hits++; | |
43 break; | |
44 } | |
45 }else{//1文字だけヒットした場合 | |
46 s_next = i;//その文字分だけ進む | |
47 } | |
48 } | |
49 } | |
50 search += s_next; | |
51 } | |
52 o_data[0] = hits; | |
53 return 0; | |
54 } |