使用C语言的字符串存储结构来实现字符串的操作,编写函数index实现在一个传中 查找子串的功能。然后从文件中每次读入一行,作为一个主串看待,然后查找是否 存在待查找的关键词(子串),如果有则显示该行内容及行号,否则继续处理下一 行
时间: 2024-10-27 08:10:58 浏览: 32
在C语言中,我们可以使用字符数组来表示字符串,并通过指针操作来实现字符串的操作。这里你可以创建一个`index`函数,用于在一个给定的主串中查找指定的子串。首先,我们需要一个结构体来包含字符串及其相关信息:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
char* str; // 主串
int len; // 主串长度
int line_num; // 当前行号
} StringInfo;
int index(StringInfo* main_str, const char* substr) {
int main_len = strlen(main_str->str);
int substr_len = strlen(substr);
for (int i = 0; i <= main_len - substr_len; ++i) {
if (strncmp(main_str->str + i, substr, substr_len) == 0) {
return i;
}
}
return -1; // 如果未找到,返回-1表示不存在
}
void search_in_file(const char* filename, const char* keyword) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
perror("Error opening file");
return;
}
int line_number = 1;
while (!feof(file)) {
char line[1024]; // 假设每行最多1023个字符
fgets(line, sizeof(line), file);
StringInfo info;
info.str = line;
info.len = strlen(line) - 1; // 减去换行符 '\n'
info.line_num = line_number;
int found_index = index(&info, keyword);
if (found_index != -1) {
printf("Keyword '%s' found at line %d:\n", keyword, info.line_num);
printf("%s\n", info.str); // 打印包含关键词的行
} else {
printf("Line %d: No match found.\n", info.line_num);
}
line_number++;
}
fclose(file);
}
阅读全文