用c语言写一个接口函数,能够搜索txt文件的内容,并使用链表,不适用lunix
时间: 2023-11-06 17:04:01 浏览: 77
以下是一个简单的C语言程序,用于在txt文件中搜索指定字符串,并将结果保存在链表中。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 256
//定义链表节点结构体
typedef struct Node {
char* line;
struct Node* next;
} Node;
//定义搜索函数,返回链表头指针
Node* search(char* filename, char* keyword) {
FILE* fp;
char line[MAX_LINE_LENGTH];
int line_num = 0;
Node* head = NULL;
Node* tail = NULL;
//打开文件
fp = fopen(filename, "r");
if (fp == NULL) {
printf("File not found.\n");
return NULL;
}
//逐行读取文件内容
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
line_num++;
//查找关键字
if (strstr(line, keyword) != NULL) {
//创建新节点
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->line = (char*)malloc(strlen(line) + 1);
strcpy(new_node->line, line);
new_node->next = NULL;
//将新节点加入链表
if (head == NULL) {
head = new_node;
tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
}
//关闭文件
fclose(fp);
return head;
}
//定义打印函数,用于输出链表内容
void print_list(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%s", p->line);
p = p->next;
}
}
int main() {
char filename[] = "example.txt";
char keyword[] = "hello";
Node* result;
//搜索文件内容
result = search(filename, keyword);
//打印结果
if (result == NULL) {
printf("No match found.\n");
} else {
printf("Match found:\n");
print_list(result);
}
return 0;
}
```
该程序首先定义了一个链表节点结构体,包含了一个指向字符串的指针和一个指向下一个节点的指针。接着定义了一个`search()`函数,该函数接受两个参数:文件名和关键字。该函数逐行读取文件内容,查找包含关键字的行,将结果保存在链表中,并返回链表头指针。最后定义了一个`print_list()`函数,用于输出链表内容。
在`main()`函数中,我们指定了文件名和关键字,调用`search()`函数搜索文件内容,并将结果保存在`result`变量中。最后,根据`result`是否为空,输出相应的提示信息,或者调用`print_list()`函数输出搜索结果。
阅读全文