mardi 22 décembre 2015

How to delete characters in vector of strings?

I am writing a code where I read a subtitle file and remove the text in () including the brackets themselves, that is subtitles for hearing impaired which have background noise in ().

The example:
13
00:01:08,535 --> 00:01:10,127 // remove this
(PIANO PLAYING) // remove this

125
00:07:09,162 --> 00:07:12,393
BOTH: (SINGING WITH RADIO) Teach // remove only the text in parenthesis, including ()
them well and let them lead the way

The code is here:

#include<iostream>
#include<fstream>
#include<string>
#include<vector>

using namespace std;

void subRem();

int main() {

    subRem();

    system("PAUSE");
}

void subRem() {

    ofstream out;
    ifstream in;

    out.open("whip it2.srt");
    if (out.fail()) {
        perror("whip it2.srt");
    }

    in.open("whip it.srt");
    if (out.fail()) {
        perror("whip it.srt");
    }

    vector<string> input;
    string inc;

    while (getline(in, inc)) {
        input.push_back(inc);
    }
    vector<int> len;
    for (int i = 0; i < input.size(); i++) {
        len.push_back(input[i].size());
    }

    for (int i = 0; i < input.size(); i++) {
        for (int j = 0; j < len[i]; j++) {
            if (input[i][j] == '(') {
                for (int k = j; k < len[i]; k++) {
                    j = k;
                    if (input[i][k] == ')') {
                        if (k == (len[i] - 1)) {
                            input[i - 1] = "";
                        }
                        input[i][k] = '\0';
                        break;
                    }
                    input[i][k] = '\0';
                }
            }
        }
    }

    for (int k = 0; k < input.size(); k++) {
        out << input[k] << endl;
    }
}

I want to delete the characters in parenthesis, so I am using:

input[i][k] = '\0';

The problem is the characters are removed but they are replaced by whitespace, for example:

(SHOUTING) with her?

I get:

___________with her?

(____ are whitespaces because I couldn't make them appear)

There is the white space. If it was string, I could do:

input[i][k] = "";

but with characters I get the error when I do:

input[i][k] = '';

quoted string should contain at least one character

I plan to improve the code further by renaming the line numbers and deleting extra newlines, but I want to create like an app where I can drag and drop the subtitle file and click run, to get the modified subtitle file. What do I need to know to create the GUI? Do I need to learn Qt or some other libraries?

Aucun commentaire:

Enregistrer un commentaire