我正在努力找出解析字符串的方法,并通过将其设为大写来“突出显示”结果中的搜索词。
我已经尝试过使用strstr并移动一个指针和“toupper”字符,但无济于事。
char * highlight( char *str, char *searchstr ) {
char *pnt=str;
int i;
pnt=strstr(str,searchstr);
while(pnt){
printf("ststr retured: %s\n", pnt);
for(i=0;i<strlen(searchstr);i++) {
printf("%c",toupper(pnt[i]));
}
printf("\n");
pnt=pnt+strlen(searchstr);
pnt=strstr(pnt,searchstr);
}
return str;
}
非常感谢任何建议。
答案 0 :(得分:2)
由于Schot提到了每一次事件:
#include <string.h>
char *highlight(char *str, char *searchstr) {
char *pnt = str;
while (pnt = strstr(pnt, searchstr)) {
char *tmp = searchstr;
while(*(tmp++)) { *pnt = toupper(*pnt); pnt++; }
}
return str;
}
int main() {
char s[] = "hello world follow llollo";
char search[] = "llo";
puts(highlight(s, search));
return 0;
}
输出是:
$ ./a.out
heLLO world foLLOw LLOLLO
答案 1 :(得分:1)
您是否理解该函数将字符串作为参数然后返回相同的字符串,同时还没有修改该字符串?所有函数都是打印到stdout大写字符。
在某些时候,您需要更改字符串本身,例如;
pnt [i] = toupper(pnt [i]);
答案 2 :(得分:0)
就像Blank Xavier所说,你可能想要修改实际的字符串。 toupper
不会更改您提供的字符的值,但会返回一个大写字母的新字符。您必须将其显式指定回原始字符串。
一些额外提示:
strlen
调用,只执行一次并存储结果。searchstr
声明为const char *
来表达不改变strstr
的承诺。#include <string.h>
#include <ctype.h>
char *highlight(char *s, const char *t)
{
char *p;
size_t i, len = strlen(t);
for (p = s; (p = strstr(p, t)); p += len)
for (i = 0; i < len; i++)
p[i] = toupper(p[i]);
return s;
}
匹配的简单方法:{{1}}