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

如何在C++中生成滑动三元组?后续三元组始于前一个的第二个字符

解决滑动窗口提取小写字母子串的问题

看起来你需要处理一个包含混合大小写字母和特殊字符的文本文件,生成连续的3字符滑动窗口子串(全小写,过滤非字母)。我来帮你一步步实现这个需求:

需求拆解

首先明确我们要完成的核心步骤:

  1. 读取目标.txt文件的全部内容
  2. 过滤掉所有非字母字符,同时将所有字母转为小写
  3. 从处理后的纯字母字符串中,生成滑动窗口长度为3的连续子串,每次窗口右移1位,直到剩余字符不足3个为止

完整C语言实现代码

结合你已有的代码基础(用到了ctype.h,这很适合字符处理),这里给出可直接运行的完整实现:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAX_BUFFER_SIZE 1024  // 根据文件大小调整

int main() {
    // 1. 打开文件
    FILE *file = fopen("input.txt", "r");  // 替换成你的文件名
    if (!file) {
        perror("Failed to open file");
        return 1;
    }

    // 2. 读取文件内容并预处理(过滤非字母+转小写)
    char buffer[MAX_BUFFER_SIZE] = {0};
    char cleaned_str[MAX_BUFFER_SIZE] = {0};
    size_t clean_index = 0;

    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        for (size_t i = 0; buffer[i] != '\0'; i++) {
            if (isalpha(buffer[i])) {
                cleaned_str[clean_index++] = tolower(buffer[i]);
            }
        }
    }
    fclose(file);

    // 3. 生成滑动窗口子串
    size_t str_len = strlen(cleaned_str);
    if (str_len < 3) {
        printf("处理后的字符串长度不足3,无法生成目标子串\n");
        return 0;
    }

    for (size_t i = 0; i <= str_len - 3; i++) {
        // 每次取3个连续字符,输出后加空格
        printf("%c%c%c ", cleaned_str[i], cleaned_str[i+1], cleaned_str[i+2]);
    }
    printf("\n");

    return 0;
}

代码解释

  • 文件读取:使用fopen打开文件,fgets逐行读取内容,处理大文件时可以调整MAX_BUFFER_SIZE或者改用逐字符读取
  • 字符预处理:通过isalpha判断是否为字母,tolower转为小写,只保留符合要求的字符到cleaned_str中
  • 滑动窗口生成:遍历cleaned_str,从索引i开始取i、i+1、i+2三个字符,直到i的最大值为str_len - 3(保证最后一个子串有3个字符)

测试验证

用你给出的示例字符串tHe@doG#wENt&uP$tHE!hiLL!测试,预处理后得到纯小写字母串:thedogwentupthehill,运行代码会输出:

the hed edo dog ogw gwe wen ent ntu tup upt pth the heh ehi hil ill 

完全符合你预期的结果开头。

注意事项

  • 如果你的文件特别大,建议动态分配内存(用malloc)代替固定大小的缓冲区
  • 你原来代码中引入的bigint/bigint.h和functions.h如果和当前需求无关,可以暂时移除,避免编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:49:06