Linux C,任意位置删除文本文件中n个字符并将该字符后面的所有内容整体向前移动n个字符,打印删除的字符和删除文件的位置,示例代码
时间: 2024-02-20 17:56:43 浏览: 60
以下是一个简单的示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 1000 // 假设每行文本最大长度为1000
void deleteChars(FILE *fp, int pos, int n) {
char line[MAX_LENGTH];
// 记录当前行数以及字符数
int line_num = 1, char_num = 0;
// 读取每一行
while (fgets(line, MAX_LENGTH, fp)) {
// 如果要删除的位置在当前行
if (pos >= char_num && pos < char_num + strlen(line)) {
// 计算要删除的字符在当前行的位置
int delete_pos = pos - char_num;
// 打印删除的字符和删除的位置
printf("第%d行,删除的字符:", line_num);
for (int i = delete_pos; i < delete_pos + n; i++) {
printf("%c", line[i]);
}
printf("\n");
// 将后面的字符整体向前移动n个位置
for (int i = delete_pos + n; i < strlen(line); i++) {
line[i - n] = line[i];
}
line[strlen(line) - n] = '\0';
// 跳出循环
break;
}
// 更新字符数和行数
char_num += strlen(line);
line_num++;
}
// 将修改后的内容写回文件
fseek(fp, 0, SEEK_SET);
for (int i = 1; i < line_num; i++) {
fgets(line, MAX_LENGTH, fp);
}
fputs(line, fp);
while (fgets(line, MAX_LENGTH, fp)) {
fputs(line, fp);
}
}
int main() {
char filename[MAX_LENGTH];
int pos, n;
printf("请输入文件名:");
scanf("%s", filename);
printf("请输入要删除的位置和字符数(用空格分隔):");
scanf("%d %d", &pos, &n);
FILE *fp = fopen(filename, "r+");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
deleteChars(fp, pos, n);
printf("文件修改完成!\n");
fclose(fp);
return 0;
}
```
示例运行结果:
```
请输入文件名:test.txt
请输入要删除的位置和字符数(用空格分隔):6 5
第2行,删除的字符:Worl
文件修改完成!
```
注意:该示例代码只能删除文件中的一行字符,如果要删除跨行的字符,需要进行更复杂的处理。
阅读全文