第一次在這裏發佈,所以我很抱歉,如果我搞砸了。 我需要搜索一個字符串並返回包含搜索數據的任何字符串,並突出顯示搜索數據。搜索字符串C
例子: 如果我的初始字符串爲:Hi my name is
,我的搜索詞是:name
,則輸出應爲:Hi my NAME is
這是一個簡單的代碼我寫的作品,但它只能使用一次。如果我嘗試再次搜索seg故障。
我希望有人能夠以更好的方式暗示我寫這篇文章,因爲這段代碼很噁心!
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)'打印部分原始字符串。 – nhahtdh