字幕校对问题

伴随着中国国产影视作品风靡国外,听不懂汉语的观众需要英文字幕的帮忙才能理解影片故事情节。现在小喇叭接到了这样一个任务,他需要按照标准.STA字幕格式的需要,对字幕文件进行编辑。标准英文字母格式如下:

[Ordinal number of the block]
[Beginning time of the subtitles --> Ending time of the subtitles]
[Subtitle text in one or more lines]

每两个字幕信息之间用一行空行隔开。时间格式为HH:MM:SS,TTT(注意是英文的冒号和逗号),表示 小时:分钟:秒,毫秒。 这是一个.STA格式文件的样例:

1
00:00:01,600 --> 00:00:04,200
Good day!
2
00:00:05,900 --> 00:00:07,999
Good day to you too!
Here you go!
3
00:00:10,000 --> 00:00:14,000
May I please have ten garlic sausages?

由于影片播放时需要对原有视频进行编辑以适应播出时长,所以字母文件也要做适当的调整,因此小喇叭的任务就是编写程序完成对字幕文件的编辑。
输入说明
每个测试样例最多不超过30行。第一行是字幕序号,第2行是按照.STA字幕格式的时间信息,第3行开始时字母信息,可能有多行字幕。为了便于处理,字幕中仅包含大小写字母和如下符号 ‘,.?!。(’。‘不含在内) ,最后一个字幕信息块后是一个’#'号,表明本测试样例末尾。 '#'号之后是一个整数T(-10000<=T<=10000),表示需要对字幕文件中时间信息进行调整的偏移量。
输出说明
按照给出的T(毫秒)编辑需求,调整字母文件中的时间信息(每个字幕块中的开始和结束时间)。并将修改好时间的字幕文件打印出来。测试数据保证编辑后的时间不会出现负值。

输入样例

8
00:00:01,600 --> 00:00:04,200
We thought you was…
9
00:00:05,900 --> 00:00:07,999
a toad.

300

输出样例

8
00:00:01,900 --> 00:00:04,500
We thought you was…
9
00:00:06,200 --> 00:00:08,299
a toad.

解题思路

首先很容易想到,该类的字符串处理题需要使用正则表达式经行处理,因为字幕的符号被限定,所以我们能根据每一行的字符特点利用正则表达式进行定位匹配,然后剩下的就是简单的数字处理。本题难点不在于复杂逻辑,而在于字符串处理。

首先利用空格和换行将各字段分为若干字符串,为了适应这样的储存方式我选择使STL库中的vector容器,然后创建两个正则表达式分别匹配“–>”和时间字符串里特有的“:”,首先输出序号,然后经行判断,如果遍历到”–>”,则将前后的字符串放入时间处理函数中,在事件处理函数中,将字符串里的时间数字取下化为数字类型,经行时间的增减操作,然后重新转换成字符串输出。对于非时间相关的字符串,则照常输出。

代码实现

#include<iostream>
#include<string>
#include<vector>
#include<regex>
using namespace std;// 修改字幕出现时间
void corTime(string str, int delay)
{int h = (str[0] -48) * 10 + str[1] - 48;int min = (str[3] - 48) * 10 + str[4] - 48;int s = (str[6] - 48) * 10 + str[7] - 48;int ms = (str[9] - 48) * 100 + (str[10] - 48) * 10 + str[11] - 48;ms += delay;while(ms >= 1000){ms -= 1000;s++;if(s >= 60){min++;if(min >= 60)h++;}}if(h < 10)cout << "0" + to_string(h);elsecout << h;cout << ":";if(min < 10)cout << "0" + to_string(min);elsecout << min;cout << ":";if(s < 10)cout << "0" + to_string(s);elsecout << s;cout << ",";if(ms < 10)cout << "00" + to_string(ms);else if(ms < 100)cout << "0" + to_string(ms);elsecout << ms;
}// 正常输出字幕
void correct(vector<string>& s, int delay)
{regex reg("-->");regex reg2(".*:.*");int k = 0; for(vector<string>::iterator it = s.begin(); it != s.end(); it++){if(k == 0){if(*(it + 2) == "-->")continue;if(*(it + 2) == "#")k = 1;}if(regex_match(*it, reg)){cout << endl << *(it - 2) << endl;corTime(*(it - 1), delay);cout << " --> ";corTime(*(it + 1), delay);cout << endl;}else if(regex_match(*it, reg2))continue;else if(*it == "#")cout << endl << *it;elsecout << *it << " ";}
}int main()
{// 初始化题目条件 vector<string> s;string t;do{cin >> t; s.push_back(t);}while(t != "#");int delay;cin >> delay;// 执行字幕校对操作 correct(s, delay);return 0;
}


更多内容大家可以前往我的个人博客浏览:eyes++的个人空间

C++算法——字幕校对问题相关推荐

  1. labelimg如何调整框的颜色_新手如何快速做字幕?

    做字幕有很多方法,比如AE软件脚本分割字幕法,比如ps软件变量定义批量制作字幕法等等.今天给大家分享下,我觉得最常用,且比较专业,也是效率比较高的方法.做字幕的流程,一般为,文案准备,制作字幕(校对文 ...

  2. 剪映导出SRT字幕超详细图文教程

    剪映导出SRT字幕超详细图文教程 视频的字幕是制作视频的过程当中一个很麻烦的事情. 不仅要使得字幕和人声出现的时间匹配,还要校对错别字,删减字幕,增加字幕等繁琐的操作.在以往为视频添加字幕的操作中,有 ...

  3. React Conf 2018 专题 —— React Today and Tomorrow Part II 视频中英双语字幕

    距离 React Conf 2018 结束已经将近一个月了,距离上个 React Conf 2018 的中英文双语视频发布也有两周的时间了,这两周,一直在进行Dan Abramov 的关于 React ...

  4. Python数据结构15:turtle模块制图,画直线,正方形,星星,递归可视化:分形树,谢尔宾斯基三角形

    1. Python中的turtle模块制图 前面已经讲了递归的原理,这里用递归作图来直观的理解递归. 首先了解以下Python中用于作图的内置海龟作图系统turtle module. Python内置 ...

  5. Python数据结构20:动态规划:找零兑换问题的动态规划解法并显示使用的硬币组合

    在我们使用递归算法时,可能会出现规模庞大的重复计算,用一个中间表记录每个计算过的最优解法,就可以避免大量的重复计算.中间结果记录可以很好解决找零兑换问题.实际上,这种方法还不能称为动态规划,而是叫做& ...

  6. GNN通俗笔记:图神经网络在推荐/广告中的应用

    原始视频:七月在线公开课<图神经网络在推荐广告场景中的应用>,课件可以打开视频页面下载 分享老师:推荐吴老师,推荐/广告算法专家,曾任部门算法负责人,年薪....不低 字幕校对:天保,全程 ...

  7. Python数据结构14:递归的原理,递归实现数列求和、求阶乘、十进制转为任意进制

    1. 概念:什么是递归? 递归(Recursion)是一种解决问题的方法.尤其是复杂问题,有时用递归解决复杂问题可能会出奇的简单. 递归将一个比较复杂的问题分解成更小规模的问题,持续分解直到问题规模小 ...

  8. Coggle专访系统之神与我同在:我的竞赛学习路线

    公众号 系统之神与我同在 问题1:个人简介 给大家介绍下自己吧,个人信息.个人社交(github.知乎.csdn)地址.个人经历. 竞赛经历 我是来自北京百分点科技集团股份有限公司,认知智能实验室武汉 ...

  9. 阿里智能运维实践|阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年 ...

  10. 还在人工视频翻译和文档配音?这些AI都帮你干完了!

    火山翻译Studio是由火山翻译团队开发的一款新型AI视频翻译及文档配音工具,提供简单高效的视频「转写-打轴-翻译」全流程服务,帮助用户轻松应对视频内容的跨语言传播,文档配音功能则为用户提供流畅自然的 ...

最新文章

  1. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
  2. 智能车竞赛:提问与回答
  3. java reactor框架_Java反应式框架Reactor中的Mono和Flux
  4. android的m、mm、mmm编译命令
  5. [BZOJ4537][Hnoi2016]最小公倍数 奇怪的分块+可撤销并查集
  6. 《从零开始学习jQuery》及《jQuery风暴》学习笔记
  7. c++_iomanip头文件一些函数记录
  8. Windows 系统中 hosts 文件无法修改的问题
  9. 2022年固定资产管理系统的概况
  10. 从技术问题变成RPWT
  11. 如何正确、高效地进行论文阅读和批判性思考
  12. iOS 苹果企业账号申请流程
  13. Centos7.5安装redis
  14. 艾媒咨询:2015年度中国智能路由器市场监测报告
  15. [bzoj1984]月下“毛景树” 树链剖分
  16. 我的2020年终总结
  17. 数据交易相关法规比较研究
  18. linux nobody用户是什么 nobody用户介绍
  19. Nature:肠道微生物异常为何会导致肝病?
  20. 人间,除了生死,一切都不是事

热门文章

  1. Web表单设计:表单结构
  2. 2020年中国海洋大学夏令营记录
  3. 使用UltraISO制作光盘镜像
  4. 112 洪聖民 捽翁
  5. Coordinatorlayout嵌套滑动,自定义Behavior,听我来讲讲?
  6. c语言如何编辑数学公式,怎样用C语言编写数学公式
  7. 【论文速览】PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  8. 新计算机分区,新电脑如何分区 新电脑怎么分盘
  9. ESP8266连得上WIFI却连不上手机热点
  10. ios 开发控件中心点_AppCan