[00:00.00]
[00:54.25]1
[00:57.14]2
[01:01.04]3
[01:05.78]4
[01:08.03]5
[01:11.02]6
[01:14.21]7
[01:19.64]8
[01:21.83]9
[01:28.68]a
[01:33.34]b
[01:36.65]c
[01:40.58]d
,对于每一个空行,我想拿下一行的时间戳,0.8减去它,并把它放在空白行。添加时间戳空行由于在文本文件中的以下文本的文本文件
[00:00.00]
[00:54.25]1
[00:57.14]2
[01:01.04]3
[01:05.78]4
[01:08.03]5
[01:11.02]6
[01:14.21]7
[01:19.64]8
[01:21.03]
[01:21.83]9
[01:28.68]a
[01:33.34]b
[01:35.85]
[01:36.65]c
[01:40.58]d
这是我的想法的电流火车:在每行的末尾
1)的文本文件复制到焦炭的载体,附加字符“\ n”。
2)循环遍历所有'\ n',直到它连续发现它们中的2个。
3)一旦确定,它会在接下来的9个字符处查看(时间戳不包括最后一个字符']'),并将其存储到一个变量中。
4)删除不必要的字符'['和':',取前2个数字,乘以60(使秒),并将其添加到接下来的2个数字并存储到一个int。
5)将int减去0.8,并将秒转换为分钟,将其转换为字符,然后重新添加字符'['和':'。
6)在两个'\ n'之间添加时间戳和字符']'。
7)循环到下一个'\ n'。
到目前为止,我只推文件到载体,并试图寻找2个新行:
using namespace std;
int main() {
ifstream inFile("file.txt");
vector<char> lineArray;
string line;
char newLine = '\n';
ofstream outFile("newfile.txt");
while (getline(inFile, line)) {
copy(line.begin(), line.end(), back_inserter(lineArray));
lineArray.push_back(newLine);
}
for (std::vector<char>::const_iterator i = lineArray.begin(); i != lineArray.end(); ++i)
if (*i != '\n\n') {
std::cout << *i;
}
system("pause");
}
这里是我的以下几个问题:
1)如果(* I =“\ n! \ n')没有工作。如何检查* i是否等于2个换行符?
2)你如何“偷看”新的几个字符,而无需迭代并将其存储到变量中?
3)如何在迭代过程中将新计算的时间戳添加到矢量的中间?
预先感谢您。
你为什么不计算时间戳?如果遇到空行,请设置一个标志,然后在读取下一个非空行时,首先按调整后的空时间戳,重置标志并继续。当你有多个连续的空行时,你不知道你想要做什么。如果时间戳由空行分隔的时间间隔小于800毫秒,您也不清楚要执行什么操作。你保证时间戳总是小于99:59.99吗? – paddy
我会先回答你的后面的问题。不会有任何连续的空行,保证。如果由空行分隔的时间戳间隔小于800毫秒,那么如果空行具有2个时间戳的平均值,我希望它。是的,时间戳将保证小于99:59.99。至于你的第一个问题,我不完全确定如何完成。 – user3245228
*“将int减去0.8”*您不会满意从整数减去0.8的结果。更好地将你的整个时间戳翻译成一个整数(m * 6000 + s * 100 +分数)并减去80. – grek40