You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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. 测试注意事项

  1. 确保你的文本文件命名为email_interests.txt,和程序放在同一目录,或者修改代码里的文件路径。
  2. 输入邮箱时,要和文件里的完全一致(大小写敏感,如果你需要不敏感,可以把strcmp换成strcasecmp,注意需要包含<strings.h>)。

内容的提问来源于stack exchange,提问作者hanuruh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:17