【发布时间】:2012-10-13 03:34:23
【问题描述】:
第一次在这里发帖,如果我搞砸了,我很抱歉。 我需要搜索一个字符串并返回包含搜索数据的任何字符串,并突出显示搜索数据。
示例:
如果我的初始字符串是: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]);
}
}
【问题讨论】:
-
查找字符串长度可以用
strlen,复制可以用strncpy(尽量不要用strcpy)。您可以使用printf("%.*s", number_of_char_to_print, pointer_to_position_to_start_printing)打印部分原始字符串。