打印一个单词,替换那个单词,然后打印字符串的其余部分 (C)

Print up to a word, replace that word, then print the rest of string (C)

我在打印字符串然后替换单词然后打印字符串的其余部分时遇到了很多麻烦。我想用 \e[7m 字 \e[0m 替换 "word" 变量。我尝试使用 strcasetr 来找到单词在字符串中的位置,它 returns 是一个从字符串开始的指针。我的问题是如何使用此指针打印到该点为止的字符串,将单词替换为 \e[7m word \e[0m,然后打印字符串的其余部分

        struct node *ptr;
int count = 0;
char* filecheck = "";
char* tester = "";
char* pch = "";
char str[1024];
int i; 
int j;
int charcount = 0;   

                int counter = 1;
                FILE *fp = fopen(ptr->fileName, "r");
                char line [ 1024 ]; /* or other suitable maximum line size */
                int counter = 1;
                while ( fgets ( line, sizeof line, fp ) != NULL ) /* read a line */{
                    //print the line
                     printf("\e[7m %s \e[0m", word);
                     printf("%s", line);

}

打印 word 之后的部分很简单:只需从 word 开始后的 strlen(word) 个字符开始。打印替换是微不足道的(除非你需要计算替换,你没有说如何做)。

剩下 word 之前的部分。如果 tester 中没有字符串常量,您可以将 *pch 设置为 0,在 word 的开头终止字符串,然后只打印 tester (然后把你擦掉的字符放回去)。相反,您可以将要打印的 tester 部分复制到字符数组中,然后打印它。

这是一种简单的方法

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char *tester = "Hello my name is Rocky the polar bear";
    char *pch    = NULL;
    char *word   = "the";

    pch = strcasestr(tester, word);
    if (pch != NULL)
    {
        size_t length;

        /* this will give the difference between the pointers */
        length = pch - tester;
        /* write to stdout from the start of the string just 'length' bytes */
        fwrite(tester, 1, length, stdout);
        /* write the word you want to substitute */
        printf("3[7m%s3[0m", word);
        /* pch is pointing to the start of 'word' in the string, advance to it's end */
        pch += strlen(word);
        /* print the rest of the string */ 
        printf("%s", pch);
    }

    return 0;
}