처음 게시 할 때 여기에 처음 게시되므로 엉망이되면 죄송합니다. 문자열을 검색하고 강조 표시된 검색 데이터가 포함 된 문자열을 반환해야합니다.문자열 검색 C
예 : Hi my name is
, 내 검색어는 다음과 같습니다 : 내 초기 문자열 인 경우 name
, 출력이되어야한다 : Hi my NAME is
이 내가 그 작품을 쓴 빠른 코드는하지만 한 번만 사용할 수 있습니다. 만약 내가 다시 시도하면 seg faults.
누군가이 코드를 쓰면 더 좋은 방법으로 나를 암시 할 수 있기를 바랬는데,이 코드가 역겨운 데! 내가 게으른 멍청하고 (이것을 고약한 많은 어렵게) 멀티 바이트 문자 적합성에 대한 전제 조건은 없었다 때문
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]);
}
}
찾기, 복사가'strncpy에서 수행 할 수 있습니다 '('strcpy '를 사용하지 말 것). 'printf ("%. * s", number_of_char_to_print, pointer_to_position_to_start_printing)'를 사용하여 원래 문자열의 일부를 인쇄 할 수 있습니다. – nhahtdh