gpt4 book ai didi

strstr() 中的着色匹配子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:52 27 4
gpt4 key购买 nike

这里是 C 的初学者。

我知道 strstr() 可用于查找字符串是否包含某个子字符串并且 printf() 可以显示彩色输出(如此处解释:stdlib and colored output in C) .

我想弄清楚的是一种仅对字符串的匹配部分着色的简单方法(如在grep中),因为strstr() 从匹配中返回整行。或者,我可以打印整条匹配线,但最终整条线都会被着色。

假设 bold = coloring 用于说明目的,我在搜索子字符串 elephant 时想要的结果是:

this is an elephant's tusk

printf + 着色 strstr() 输出给出:

elephant's tusk

当然还有 printf + 给整个匹配行着色:

this is an elephant's tusk

提前感谢您的帮助。

最佳答案

最简单的解决方案是将打印过程分成三部分。如果 strstr 返回非 NULL 结果,则打印从初始字符串开始到到达 strstr 结果的字符数。然后为 strstr 结果着色,直到匹配“针”的长度。然后打印大海捞针未着色的剩余部分:

const char *color_start, *color_end;

print_head = haystack;
color_start = strstr (haystack, needle);
color_end = color_start + strlen (needle) - 1;

while (*print_head) {
if (print_head == color_start) { /* init color change */ }
else if (print_head == color_end) { /* revert color change */ }
putchar (*print_head++);
}

一个更高效的版本是:

const char *color_start, *color_end;

print_head = haystack;
color_start = strstr (haystack, needle);
color_end = color_start + strlen (needle) - 1;

while (print_head < color_start)
putchar (*print_head++);
/* init color change */
while (print_head <= color_end)
putchar (*print_head++);
/* revert color change */
while (*print_head)
putchar (*print_head++);

它更有效,因为它在每个循环中只测试一个条件,而不是每个循环最多三个条件。

关于strstr() 中的着色匹配子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com