倒排索引是一种常用的文本搜索技术，在很多搜索引擎中都有应用。
下面是使用C语言实现倒排索引的简单示例代码：


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

#define MAX_WORD_LEN 50
#define MAX_DOC_NUM 100
#define MAX_WORD_NUM 1000

typedef struct {
    char word[MAX_WORD_LEN];
    int doc_list[MAX_DOC_NUM];
    int doc_num;
} InvertedIndex;

int main() {
    InvertedIndex index[MAX_WORD_NUM];
    char doc[MAX_WORD_LEN];
    int doc_id = 0;
    int word_id = 0;

    // 初始化倒排索引
    memset(index, 0, sizeof(index));

    // 输入文档列表，以空格分隔
    printf("请输入文档列表（以空格分隔，回车结束输入）：");
    while (scanf("%s", doc) == 1) {
        int i, j, found = 0;
        for (i = 0; i < word_id; i++) {
            if (strcmp(doc, index[i].word) == 0) {
                // 如果单词已经存在于倒排索引中，则将文档ID加入到该单词的文档列表中
                for (j = 0; j < index[i].doc_num; j++) {
                    if (index[i].doc_list[j] == doc_id) {
                        found = 1;
                        break;
                    }
                }
                if (!found) {
                    index[i].doc_list[index[i].doc_num++] = doc_id;
                }
                found = 1;
                break;
            }
        }
        if (!found) {
            // 如果单词不存在于倒排索引中，则创建新的单词项，并将文档ID加入到文档列表中
            strcpy(index[word_id].word, doc);
            index[word_id].doc_list[index[word_id].doc_num++] = doc_id;
            word_id++;
        }
        doc_id++;
    }

    // 输出倒排索引
    printf("倒排索引如下：\n");
    for (int i = 0; i < word_id; i++) {
        printf("%s: ", index[i].word);
        for (int j = 0; j < index[i].doc_num; j++) {
            printf("%d ", index[i].doc_list[j]);
        }
        printf("\n");
    }

    return 0;
}
该示例程序使用结构体存储倒排索引，每个结构体包含一个单词、一个文档ID列表以及列表中元素的个数。程序首先初始化倒排索引，然后输入文档列表，对于每个单词，程序搜索倒排索引，如果单词已经存在于倒排索引中，则将文档ID加入到该单词的文档列表中；否则，程序创建新的单词项，并将文档ID加入到新单词项的文档列表中。最后，程序输出倒排索引。
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence