如何用C语言从文本文件提取指定邮箱对应的兴趣关键词
嘿,这个需求我刚好做过类似的,给你一套完整的实现方案,包含代码和关键细节说明:
完整实现步骤与代码
1. 核心思路
我们需要完成这几个关键动作:
- 从文本文件中解析出邮箱-兴趣列表的映射关系
- 接收用户输入的目标邮箱,找到对应的兴趣集合
- 遍历兴趣关键词,逐个调用自定义处理函数
2. 完整代码示例
#include <stdio.h> #include <string.h> #include <stdlib.h> // 自定义兴趣处理函数,你可以根据需求修改逻辑 void processInterest(const char* interest) { printf("Processing interest: %s\n", interest); // 这里替换成你的业务逻辑,比如 function(interest) } // 存储邮箱和对应兴趣的结构体 typedef struct { char email[100]; // 假设邮箱长度不超过100字符 char interests[200]; // 存储兴趣字符串,比如"Animals Sports" } EmailInterest; int main() { FILE* file = fopen("email_interests.txt", "r"); if (!file) { perror("Failed to open file"); return 1; } EmailInterest entries[50]; // 假设最多50个邮箱条目 int entryCount = 0; char buffer[300]; // 逐行读取文件,解析每个邮箱的信息 while (fgets(buffer, sizeof(buffer), file) != NULL) { // 去掉换行符 buffer[strcspn(buffer, "\n")] = '\0'; char* emailStart = buffer; // 找到"Likes:"的位置,分割邮箱和兴趣部分 char* likesToken = strstr(buffer, " Likes: "); if (!likesToken) continue; // 跳过格式错误的行 // 提取邮箱 *likesToken = '\0'; // 截断字符串,得到邮箱 strncpy(entries[entryCount].email, emailStart, sizeof(entries[entryCount].email)-1); entries[entryCount].email[sizeof(entries[entryCount].email)-1] = '\0'; // 提取兴趣部分(跳过"Likes: ") strncpy(entries[entryCount].interests, likesToken + 7, sizeof(entries[entryCount].interests)-1); entries[entryCount].interests[sizeof(entries[entryCount].interests)-1] = '\0'; entryCount++; if (entryCount >= 50) break; // 防止数组越界 } fclose(file); // 获取用户输入的目标邮箱 char targetEmail[100]; printf("Enter the email to process: "); scanf("%s", targetEmail); // 查找匹配的邮箱 int found = 0; for (int i = 0; i < entryCount; i++) { if (strcmp(entries[i].email, targetEmail) == 0) { // 拆分兴趣关键词 char* interest = strtok(entries[i].interests, " "); while (interest != NULL) { processInterest(interest); // 调用自定义函数 interest = strtok(NULL, " "); } found = 1; break; } } if (!found) { printf("Email not found in the file.\n"); } return 0; }
3. 关键细节说明
- 文件格式兼容:代码假设你的文本文件每行是一个邮箱条目(比如
email1@gmail.com Likes: Animals Sports),如果你的文件是所有条目连在一行,只需要把fgets换成fread读取整个文件内容,再按" Likes: "分割即可,逻辑类似。 - 边界处理:代码里做了数组越界保护、文件打开失败处理、邮箱未找到提示,避免程序崩溃。
- 兴趣拆分:用
strtok函数按空格分割兴趣字符串,因为你提到兴趣都是单个单词,这个方法完全适用。 - 自定义函数调用:
processInterest就是你说的function(Animals)的示例,直接替换成你的业务逻辑就行。
4. 测试注意事项
- 确保你的文本文件命名为
email_interests.txt,和程序放在同一目录,或者修改代码里的文件路径。 - 输入邮箱时,要和文件里的完全一致(大小写敏感,如果你需要不敏感,可以把
strcmp换成strcasecmp,注意需要包含<strings.h>)。
内容的提问来源于stack exchange,提问作者hanuruh
相关产品推荐
相关产品推荐

