以下程序实现将一个中文字幕和一个英文字幕合并成一个中英字幕。

1.[代码][C/C++]代码

#include

#include

#include

#define SUBFORM ".srt*"

long FileRow(char *filepath) /*读取文件行数*/

{

FILE *fp;

long row_count = 0;

char c;

if((fp = fopen(filepath, "r")) == NULL)

{

perror("Can't open!");

exit(1);

}

while(!feof(fp))

{

if(c = fgetc(fp) == '\n')

row_count++;

}

fclose(fp);

return row_count;

}

void chs_eng(char *filepath_eng, char *filepath_chs)

{

char **engsub; /*按时间段存取所有英文字幕*/

char *chs_time_buf; /*存取每一行的中文时间*/

char *chs_str_buf; /*存取每一行的中文字幕*/

FILE *fp_eng, *fp_chs, *fp_new;

char *buf; /*每一行数据缓存*/

char *filepath_new;

int index = 0, englen = 0;

long row_count = 0;

if((fp_eng = fopen(filepath_eng, "r")) == NULL)

{

perror("Faile to popen\n");

exit(1);

}

if((fp_chs = fopen(filepath_chs, "r")) == NULL)

{

perror("Faile to popen\n");

exit(1);

}

filepath_new = (char *)calloc(strlen(filepath_chs) + 5, sizeof(char));

strcpy(filepath_new, filepath_chs);

strcat(filepath_new, "*");

if(strstr(filepath_new, SUBFORM) == false)

{

perror("Subfile type wrong!");

exit(1);

}

*strstr(filepath_new, SUBFORM) = '\0';

strcat(filepath_new, "_eng");

strcat(filepath_new, SUBFORM);

*(filepath_new + strlen(filepath_new) - 1) = '\0';

if((fp_new = fopen(filepath_new, "wb+")) == NULL)

{

perror("Faile to popen\n");

exit(1);

}

if(FileRow(filepath_eng) > FileRow(filepath_chs)) row_count = FileRow(filepath_eng);

else row_count = FileRow(filepath_chs);

engsub = (char **)calloc(row_count / 3, sizeof(char *));

chs_time_buf = (char *)calloc(128, sizeof(char));

chs_str_buf = (char *)calloc(128, sizeof(char));

buf = (char *)calloc(128, sizeof(char));

while(!feof(fp_eng)) /*遍历英文字幕文件,存取数据*/

{

fgets(buf, 128, fp_eng);

if(strstr(buf, "-->") != NULL)

{

engsub[index] = (char *)calloc(128, sizeof(char));

while(!feof(fp_eng))

{

fgets(buf, 128, fp_eng);

if(strcmp(buf, "\n") == 0) break;

strcat(engsub[index], buf);

}

index++;

}

}

englen = index;

index = 0;

while(!feof(fp_chs) && index < englen) /*遍历中文字幕文件,存取数据*/

{

fgets(buf, 128, fp_chs);

if(strstr(buf, "-->") != NULL)

{

if(index > 0 && strcmp(buf, chs_time_buf) == 0) continue;

strcpy(chs_time_buf, buf);

strcpy(chs_str_buf, "");

while(!feof(fp_chs) && index < englen)

{

fgets(buf, 128, fp_chs);

if(strcmp(buf, "\n") == 0)

{

strcat(chs_str_buf, engsub[index]); /*如果遇到空行,添加英文字幕*/

break;

}

strcat(chs_str_buf, buf);

}

if(strstr(chs_str_buf, "{")) continue;

fprintf(fp_new, "%d\n", index + 1);

fputs(chs_time_buf, fp_new);

fputs(chs_str_buf, fp_new);

fputs("\n", fp_new);

index++;

}

}

for(index = 0; index < englen; index++)

free(engsub[index]);

free(engsub);

free(filepath_new);

free(chs_time_buf);

free(chs_str_buf);

free(buf);

fclose(fp_chs);

fclose(fp_eng);

fclose(fp_new);

}

int main()

{

char *filepath_eng = "D:\\文档\\CB\\sub\\subfile\\Elementary.S02E24.720p.HDTV.X264-DIMENSION.英文.srt";

char *filepath_chs = "D:\\文档\\CB\\sub\\subfile\\Elementary.S02E24.720p.HDTV.X264-DIMENSION.简体.srt";

chs_eng(filepath_eng, filepath_chs);

return 0;

}

c语言英文课程带字幕,C语言实现中英文字幕合并相关推荐

  1. 兰州大学C语言程序设计课程作业,兰州大学C语言程序设计课程作业1附答案.doc...

    兰州大学C语言程序设计课程作业1附答案.doc C 语言程序设计课程作业语言程序设计课程作业_A 历次成绩 完成时间 查看详情 1.0.0 2015-11-21 091531 2.0.0 2015-1 ...

  2. 兰州大学C语言程序设计课程作业,【兰州大学|兰州大学C语言程序设计课程作业( 五 )】语言程序设计|课程|作业-傻大方...

    『易坊知识库摘要_兰州大学|兰州大学C语言程序设计课程作业( 五 )』34.用户未作答标准答案exp04. 以下叙述中正确的是 在程序的一行上可以出现多个有效的预处理命令行使用带参的宏时,参数的类型应 ...

  3. 课程管理系统c语言程序,课程信息管理系统C语言程序Word版

    <课程信息管理系统C语言程序Word版>由会员分享,可在线阅读,更多相关<课程信息管理系统C语言程序Word版(19页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文 ...

  4. c语言程序设计课程作用,《C语言程序设计》课程标准

    <C语言程序设计>课程标准 适用专业: 三年制中职计算机应用专业 一.前言 (一)课程的性质 本课程是中职软件与信息服务专业的一门主干专业基础课程,旨在培养学生计算机编程基本思想.编程基本 ...

  5. c语言简单课程设计报告,C语言课程设计报告—范例

    <C语言课程设计报告-范例>由会员分享,可在线阅读,更多相关<C语言课程设计报告-范例(18页珍藏版)>请在人人文库网上搜索. 1.XX学院C语言课程设计报告课程名称: C语言 ...

  6. c语言查询课程信息,《C语言程序设计》课程设计报告-招生信息查询系统.docx

    <C语言程序设计>课程设计报告-招生信息查询系统 课 程 设 计 报 告题目: 招生信息查询系统 课程名称: C语言程序设计 专业班级: 信息安全1302 学 号: 姓 名: 指导教师: ...

  7. c语言程序课程设计摘要,C语言程序课程设计报告精编.docx

    湖南涉外经济学院 课程设计报告 课程名称: 报告题目: 学生姓名: 所在学院: 专业班级: 学生学号: 指导教师: C语言课程设计 **爱若烟花空< 信息科学与工程学院 **** 爱若 烟 花* ...

  8. c语言程序设计课程技能点,C语言程序设计课程标准.doc

    徽商职业学院C语言程序设计课程标准 课程编码课程类别B适用专业软件.信管.自动化授课单位电子信息系学 分4学 时64编写执笔人王艳兵审定负责人编写日期2012.9.18审定日期一.课程概述 (一)课程 ...

  9. c语言程序设计课程设计水果,C语言程序设计课程设计报告超市水果信息管理系统...

    C语言程序设计课程设计报告超市水果信息管理系统 西 安 邮 电 大 学(计算机学院)高级语言课程设计报告题 目: 超市水果信息管理系统专业名称: XXXX班 级: XXXX学生姓名: XXXX学号(8 ...

最新文章

  1. leetcode 442. Find All Duplicates in an Array | 442. 数组中重复的数据(位运算)
  2. 英特尔收购McAfee的10种结局猜测
  3. leetcode 879. 盈利计划(dp)
  4. java失败javac成功_JAVA SE JDK-10安装、配置(解决java成功,javac失败问题)
  5. TCP协议特点和TCP报文段
  6. 截取字符串--sql和access的区别
  7. Zephyr移植到NXP MIMXRT1060_EVK-RT1061 CVL5A过程
  8. 从零开始的Python学习Episode 19——面向对象(2)
  9. mysql 合并_MySQL——合并查询结果
  10. Nexus下载网盘地址,免费哦,烦要币的
  11. python为什么卸载不了_为什么Python3.8删除不了?
  12. Python爬虫案例:爬取必应壁纸
  13. GBase8a如何选择 hash 分布列
  14. OpenCASCADE 读写STEP文件
  15. 微信小程序:map地图自动缩放自适应大小
  16. 加班、加人、延期是糟糕的办法
  17. NAS不够快?那就上SSD享受如火箭般的体验吧!
  18. S-Nim (HDU 1536)组合博弈SG多组游戏
  19. [从0开始机器学习]4.线性回归 正规方程
  20. 英读廊——艺术家、穷人和音乐家之10美元的奇异之旅(The Artist, the Poor Man, and the Musician)

热门文章

  1. JS运行原理与机制(乾坤未定,你我皆是黑马4-5)
  2. C#输出日志文件——log4net组件
  3. 又到一年表白季,520它又来了!Python花式表白的几种姿势
  4. 网站设计如何适合用户的操作习惯?
  5. 西安工业大学计算机科学,喻钧 - 西安工业大学 - 计算机科学与工程学院
  6. 初探CAD/CAE一体化设计
  7. c# ToolStrip控件图片和文字显示
  8. 执业医师考试该如何备考?
  9. 6.1_6 Python3.x入门 P7 【字符串格式化】四种方式(手动、%-formatting、str.format()、f-String)
  10. EasyExcel复杂表头导入(一对多)