想要优化此字符串操纵程序C
want to optimize this string manipulation program c++
我只是解决了这个问题: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,我想知道我的代码中的哪个操作价格过高,并且以某种方式优化了代码。
预先感谢..
如果我正确阅读了您的问题,则需要重新考虑您的设计。无需搜索功能,不需要erase
,substr
等。
首先,不要现在考虑[
或]
字符。从一个空白字符串开始,然后从原始字符串中添加字符。那是加快代码的第一件事。一个简单的循环是您应该开始的。
现在,在循环时,当您实际遇到这些特殊字符时,您需要做的就是将输出字符串中的"插入点"更改为字符串的开头(对于[
)或结束字符串(对于]
)。
因此,诀窍不仅是在您沿着时构建一个新字符串,还可以更改插入到新字符串中的点。最初,插入点在字符串的末端,但是如果您遇到这些特殊字符,那将会改变。
如果您不知道,则可以不仅使用+=
或+
来构建字符串,还可以使用std::string::insert
函数。
因此,例如,您始终以这种方式构建输出字符串:
out.insert(out.begin() + curInsertionPoint, original_text[i]);
curInsertionPoint++;
out
字符串是您要构建的字符串,original_text
是您给出的输入。curInsertionPoint
将从0开始,如果您遇到[
或]
字符,则会更改。i
仅仅是原始字符串的循环索引。
我不会发布更多的信息,但是您应该得到这个想法。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 操纵安卓相机的深度图导致应用程序崩溃
- 想要优化此字符串操纵程序C
- 如何制作一个操纵另一个程序的程序ui