第一次在这里发帖,如果我搞砸了,我很抱歉。我需要搜索一个字符串并返回包含搜索数据的任何字符串,并突出显示搜索数据。
示例:如果我的初始字符串是:Hi my name is
,我的搜索词是:name
,那么输出应该是:Hi my NAME is
这是我编写的一个快速代码,它可以工作,但它只能工作一次。如果我尝试再次搜索它会出现故障。
我希望有人能提示我一个更好的方法来写这个,因为这段代码很恶心!
void search(char * srcStr, int n){
int cnt = 0, pnt,i = 0;
char tmpText[500];
char tmpName[500];
char *ptr, *ptr2, *ptrLast;
int num;
while(*(node->text+cnt) != '\0'){ //finds length of string
cnt++;
}
for(pnt = 0; pnt < cnt; pnt++){ //copies node->text into a tmp string
tmpText[pnt] = *(node->text+pnt);
}
tmpText[pnt+1] = '\0';
//prints up to first occurrence of srcStr
ptr = strcasestr(tmpText, srcStr);
for(num = 0; num < ptr-tmpText; num++){
printf("%c",tmpText[num]);
}
//prints first occurrence of srcStr in capitals
for(num = 0; num < n; num++){
printf("%c",toupper(tmpText[ptr-tmpText+num]));
}
ptr2 = strcasestr((ptr+n),srcStr);
for(num = (ptr-tmpText+n); num < (ptr2-tmpText); num++){
printf("%c",tmpText[num]);
}
while((ptr = strcasestr((ptr+n), srcStr)) != NULL){
ptr2 = strcasestr((ptr+n),srcStr);
for(num = (ptr-tmpText+n); num < (ptr2-tmpText); num++){
printf("%c",tmpText[num]);
}
for(num = 0; num < n; num++){
printf("%c",toupper(tmpText[ptr-tmpText+num]));
}
ptrLast = ptr;
}
//prints remaining string after last occurrence
for(num = (ptrLast-tmpText+n); num < cnt; num++){
printf("%c",tmpText[num]);
}
}