假设我有一个像这样的大随机字符串......
_W:,aLH#J&A4=IY; ?RVUc?W+</59JG4WSGW6G6$QEHQ:>,*b60$BYR=D=-^8-4(0 "??YaI0Y SD9 FJ;MZ,V+'S]0:9L%;#a23cO%bMY[O6^S;ULRV2XA 8& 6_5W21E+Y$RYY$K"Q.0J+:cJC301M3H![7
L%K
Q5(4I9/9DAFR,-8<BJ=4H>9M,OX!.A4aQ:
BK<a"1ID.=U-US`R_])>GG)UL\!G?U$RRG_
HcW 3;<U5`X.?:6K@H*ZD3[M!ZU#KJXbE<Y*VV#ZYU#=]?Q
5:a^]#T
XRT.V]>57#W"U1=K$X]&JIY)::AE :K'7!_DV1B>SJ9D_`]>aC"N'US$;CaHK<N#-
"cJ,%RT)!J0DLFUb[[FOCQX(/.E3#
U
L$("+$) ;TDZ
;T#XS-'6U4`UKZ0a85D&+a]I.C/-7LDM_#/aS9OYA!#^G1II*XKL`;c
ES62Wa^=BQHK6E&A .X+4FDZ: 3UOaJ
#1<BY:;@D:`^`8E\-[9&7PXPH
... a lot more
我想对整个字符串进行操作,比如在分号后插入换行符。
#include <iostream>
#include <cmath>
#include <algorithm>
int main()
{
std::string buffer = "";
std::string line = "";
while (std::getline(std::cin, line))
buffer += line + std::string("\n");
auto it = std::find(buffer.begin(), buffer.end(), ';');
while (it != buffer.end())
{
buffer.insert(it, '\n');
it = std::find(it+1, buffer.end(), ';');
}
std::cout << buffer << std::endl;
return 0;
}
这显然需要很长时间。我该怎么办?如果我将它们分成更小的字符串会更好吗?如果没有,我怎样才能让它更快?
编辑
我是个白痴。我在这条线上有一个无限循环
- it = std::find(buffer.begin(), buffer.end(), ';');
+ it = std::find(it+1, buffer.end(), ';');
尽管我仍然赞扬提供了一个很好答案的人。