串的查找和替换 问题描述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。运用数据结构所学知识,用c语言写代码
时间: 2024-02-19 18:02:35 浏览: 164
数据结构串的查找与替换
好的,以下是一个使用链表实现的C语言代码实现,可以完成给定单词的查找和替换。需要注意的是,这个代码实现仍然没有考虑单词边界和大小写问题,你可以根据需要进行修改和完善。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 1024
// 定义链表结构体
typedef struct node {
char data[256];
struct node *next;
} Node, *LinkList;
// 初始化链表
void init(LinkList *L) {
*L = (LinkList) malloc(sizeof(Node));
(*L)->next = NULL;
}
// 插入节点
void insert(LinkList L, char *data) {
Node *p = (Node *) malloc(sizeof(Node));
strncpy(p->data, data, strlen(data) + 1);
p->next = L->next;
L->next = p;
}
// 查找节点
Node *find(LinkList L, char *data) {
Node *p = L->next;
while (p != NULL && strcmp(p->data, data) != 0) {
p = p->next;
}
return p;
}
// 替换节点
void replace(LinkList L, char *word, char *replace) {
Node *p = L->next;
while (p != NULL) {
if (strcmp(p->data, word) == 0) {
strncpy(p->data, replace, strlen(replace) + 1);
}
p = p->next;
}
}
int main() {
char file_name[256]; // 存放文件名的数组
char buf[BUF_SIZE]; // 存放读取到的文件内容的数组
char word[256]; // 存放要查找和替换的单词的数组
char replace[256]; // 存放要替换成的单词的数组
int len1, len2; // 分别存放要查找和替换的单词的长度
int replace_count = 0; // 统计替换的次数
FILE *fp_in, *fp_out; // 文件指针
LinkList L; // 链表
// 输入文件名、要查找和替换的单词、替换成的单词
printf("请输入文件名:");
scanf("%s", file_name);
printf("请输入要查找的单词:");
scanf("%s", word);
printf("请输入要替换成的单词:");
scanf("%s", replace);
// 计算要查找和替换的单词的长度
len1 = strlen(word);
len2 = strlen(replace);
// 初始化链表
init(&L);
// 打开文件
if ((fp_in = fopen(file_name, "r")) == NULL) {
printf("无法打开文件 %s\n", file_name);
exit(1);
}
// 读取文件内容并插入到链表中
while (fgets(buf, BUF_SIZE, fp_in) != NULL) {
char *p = strtok(buf, " ,.?\n");
while (p != NULL) {
insert(L, p);
p = strtok(NULL, " ,.?\n");
}
}
// 关闭文件
fclose(fp_in);
// 查找单词并替换
Node *p = find(L, word);
while (p != NULL) {
replace_count++;
strncpy(p->data, replace, len2);
p = find(p->next, word);
}
// 打开输出文件
if ((fp_out = fopen("output.txt", "w")) == NULL) {
printf("无法创建输出文件\n");
exit(1);
}
// 写入到输出文件中
p = L->next;
while (p != NULL) {
fputs(p->data, fp_out);
fputs(" ", fp_out);
p = p->next;
}
// 关闭文件
fclose(fp_out);
// 输出替换的结果
printf("共替换了 %d 个单词\n", replace_count);
return 0;
}
```
这个代码实现使用了链表来存储文章中的单词,并且使用了链表的插入、查找和替换操作来完成给定单词的查找和替换。需要注意的是,在将文章中的单词插入到链表中时,还需要使用字符串处理函数strtok()来分割单词。
阅读全文