2014-01-18 3 views
0

Мне нужно написать код для отсрочки субтитров.Как отложить субтитры

Мне нужно открыть файл .srt файл все время в течение некоторого времени и сохранить его в другом файле. Я знаю, как открыть файл и скопировать все в другой файл.

Например, если я открываю «Subtitle.srt», а затем записываю имя выходного файла «output», я получаю скопированный контент «Subtitle.srt» в «outputSubtitle.srt».

Это нормально, но я не знаю, как время задержки, например, если я ввода «10»

Оригинал Subbtitle.srt 00: 00: 01067 -> 00: 00: 03963 , а затем я вхожу 10 outputSubtitle.srt 00: 00: 11,067 -> 00: 00: 13,963

Мне нужно все время менять.

#include "stdafx.h" 
#include "iostream" 
#include "cstdlib" 
#include "fstream" 
#include "string" 

using namespace std; 

int main(int argc, char *argv[]){ 
ifstream input; //input 

char input_file[32]; //names of input and output 


    cout << "Enter name of input fille: "; ///user gives names of input 
    cin >> input_file; 

input.open(input_file); 
if (!input.good()){ 
cout << "File " << input_file << " dosen't exist." << endl; 
return 1; 
} 


string row; 
while (!input.eof()){  
getline(input, row); 

cout << row << endl; 
} 

system("pause"); 
return 0; 
} 
+0

Извините, но что делать субтитры для этого кода? – suspectus

+0

То же самое время в том, что xx: xx: xx, xxx format? – BWG

+0

Вы кодируете на C++, а не C, поэтому воспользуйтесь его функциями. Используйте 'std :: string', чтобы избежать опасных проблем переполнения буфера, например. если пользователь вводит имя файла более 31 символа (что, кстати, является совершенно необоснованным числом - современные ОС обычно допускают гораздо более длинные имена файлов, а те, которые обычно не намного меньше). Кроме того, использование 'eof' [неверно] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) и' system ("pause ")' [следует избегать] (http://stackoverflow.com/questions/1107705/systempause-why-is-it-wrong). – JBentley

ответ

0

Я принимаю формат строки hour:minute:second,millisecond. Ну, эта функция берет строку как начальное время, а количество int добавляется за считанные секунды. Вероятно, он сломается, если вы дадите ему отрицательное время, но любое разумное положительное время работает нормально. Он возвращает строку вывода, поэтому вы можете распечатывать строки, где была старая строка.

string add(string str, int amount) { 
    int vals[8]; 
    sscanf(str.c_str(), "%u:%u:%u,%u --> %u:%u:%u,%u", 
    &vals[0], &vals[1], &vals[2], &vals[3], 
    &vals[4], &vals[5], &vals[6], &vals[7]); 

    vals[2] += amount; 
    vals[6] += amount; 
    while((vals[2]>=60) || (vals[1]>=60) || 
      (vals[6]>=60) || (vals[5]>=60)) { 
     if(vals[2] >= 60) { 
      vals[2] -= 60; 
      vals[1]++; 
     } 
     if(vals[6] >= 60) { 
      vals[6] -= 60; 
      vals[5]++; 
     } 
     if(vals[1] >= 60) { 
      vals[1] -= 60; 
      vals[0]++; 
     } 
     if(vals[5] >= 60) { 
      vals[5] -= 60; 
      vals[4]++; 
     } 
    } 
    string out; 
    out.resize(str.length()); 
    int n = sprintf(&out[0], "%02u:%02u:%02u,%03u --> %02u:%02u:%02u,%03u", 
    vals[0], vals[1], vals[2], vals[3], 
    vals[4], vals[5], vals[6], vals[7]); 

    return out; 
}; 
Смежные вопросы