用c++实现txt文件中字符串的查找和替换
时间: 2024-05-08 14:17:29 浏览: 99
c++实现的字符串替换功能
下面是用 C 语言实现 txt 文件中字符串查找和替换的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1000
int main(int argc, char *argv[]) {
if (argc < 4) {
printf("Usage: %s filename search_string replace_string\n", argv[0]);
return 1;
}
char *filename = argv[1];
char *search_string = argv[2];
char *replace_string = argv[3];
FILE *fp = fopen(filename, "r+");
if (!fp) {
printf("Error: could not open file %s\n", filename);
return 1;
}
char line[MAX_LINE_LENGTH];
size_t search_string_len = strlen(search_string);
size_t replace_string_len = strlen(replace_string);
while (fgets(line, MAX_LINE_LENGTH, fp)) {
char *match = strstr(line, search_string);
if (match) {
size_t match_len = strlen(match);
if (replace_string_len > search_string_len) {
size_t extra_space = replace_string_len - search_string_len;
size_t line_len = strlen(line);
char *new_line = malloc(line_len + extra_space + 1);
strncpy(new_line, line, match - line);
strncpy(new_line + (match - line), replace_string, replace_string_len);
strcpy(new_line + (match - line) + replace_string_len, match + search_string_len);
fseek(fp, -match_len, SEEK_CUR);
fputs(new_line, fp);
free(new_line);
} else {
strncpy(match, replace_string, replace_string_len);
fputs(line, fp);
}
} else {
fputs(line, fp);
}
}
fclose(fp);
return 0;
}
```
该程序需要从命令行参数中获取文件名、要查找的字符串和要替换的字符串。它打开文件以进行读写,然后逐行读取文件并查找要替换的字符串。如果找到了匹配项,程序会将该行中的字符串替换为指定的字符串并写回文件。如果未找到匹配项,则不会对该行进行任何更改。
程序使用标准库函数 `strstr` 来查找字符串。该函数返回第一个匹配子字符串的指针,如果未找到匹配项,则返回 NULL。如果找到匹配项,则程序使用 `strncpy` 将新的字符串复制到缓冲区中,并使用 `fputs` 将其写回文件。如果要替换的字符串比原始字符串长,程序需要先为新的行分配额外的内存,以便在缓冲区中构建新的行。在这种情况下,程序使用 `fseek` 将文件指针移到匹配字符串的起始位置,并使用 `fputs` 将新的行写回文件。
请注意,此程序仅替换每行中的第一个匹配项。如果想要替换所有匹配项,则需要稍微修改程序。
阅读全文