想要优化此字符串操纵程序C

want to optimize this string manipulation program c++

本文关键字:操纵 程序 字符串 优化      更新时间:2023-10-16

我只是解决了这个问题:http://uva.onlinejudge.org/index.php?option=com_onlinejudge& itemid = 8& page = show_problem&problem = 3139

>

这是我的解决方案:https://ideone.com/pl8k3k

int main(void) 
{
    string s, sub;
    int f,e,i;
    while(getline(cin, s)){
        f=s.find_first_of("[");
        while(f< s.size()){
            e= s.find_first_of("[]", f+1);
            sub = s.substr(f, e-f);
            s.erase(f,e-f);
            s.insert(0, sub);
            f=s.find_first_of("[", f+1);
        }
        for(i=0; i<s.size(); i++){
            while((s[i]==']') || (s[i]=='[')) s.erase(s.begin()+i);
        }
        cout << s << endl;
    }
    return 0;
}

我会得到TLE,我想知道我的代码中的哪个操作价格过高,并且以某种方式优化了代码。

预先感谢..

如果我正确阅读了您的问题,则需要重新考虑您的设计。无需搜索功能,不需要erasesubstr等。

首先,不要现在考虑[]字符。从一个空白字符串开始,然后从原始字符串中添加字符。那是加快代码的第一件事。一个简单的循环是您应该开始的。

现在,在循环时,当您实际遇到这些特殊字符时,您需要做的就是将输出字符串中的"插入点"更改为字符串的开头(对于[)或结束字符串(对于])。

因此,诀窍不仅是在您沿着时构建一个新字符串,还可以更改插入到新字符串中的点。最初,插入点在字符串的末端,但是如果您遇到这些特殊字符,那将会改变。

如果您不知道,则可以不仅使用+=+来构建字符串,还可以使用std::string::insert函数。

因此,例如,您始终以这种方式构建输出字符串:

    out.insert(out.begin() + curInsertionPoint, original_text[i]);
    curInsertionPoint++;

out字符串是您要构建的字符串,original_text是您给出的输入。curInsertionPoint将从0开始,如果您遇到[]字符,则会更改。i仅仅是原始字符串的循环索引。

我不会发布更多的信息,但是您应该得到这个想法。