帮我用c语言链表并用scanf()函数输入写一个可以实现多行输入的KWIC索引程序
时间: 2023-04-07 15:04:02 浏览: 114
好的,我可以回答这个问题。以下是一个使用C语言链表和scanf()函数输入的KWIC索引程序的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 100
#define MAX_WORD_LEN 20
typedef struct Node {
char *line;
struct Node *next;
} Node;
void insert(Node **head, char *line) {
Node *new_node = (Node *) malloc(sizeof(Node));
new_node->line = line;
new_node->next = NULL;
if (*head == NULL) {
*head = new_node;
} else {
Node *current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
}
}
void print_kwic(Node *head) {
Node *current = head;
while (current != NULL) {
char *line = current->line;
int len = strlen(line);
for (int i = 0; i < len; i++) {
if (line[i] == ' ') {
printf("%s\n", line + i + 1);
for (int j = 0; j < i; j++) {
printf("%c", line[j]);
}
printf("\n");
}
}
current = current->next;
}
}
int main() {
Node *head = NULL;
char line[MAX_LINE_LEN];
while (scanf("%[^\n]%*c", line) == 1) {
insert(&head, strdup(line));
}
print_kwic(head);
return 0;
}
```
该程序使用链表存储输入的每一行,并在打印KWIC索引时遍历链表。对于每一行,它会找到第一个空格,并将其后面的单词移到行首,然后打印出来。然后它会打印出原始行,但不包括第一个单词。这样就可以生成KWIC索引了。
希望这个程序对你有所帮助!
阅读全文