回答編集履歴
2
注釈追加
answer
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
raccyさんのように別の文字列に移し替えるようにすれば最小限のコピーで済みます。
|
3
3
|
|
4
4
|
raccyさんとは別のやり方で作ってみました。文字列領域を若干多めに取ることになりますが、コピーは最小限だと思います。
|
5
|
+
※reserveで領域サイズを決め打ちしているので、もしかしたら領域の節約になっているかもしれません。
|
5
6
|
|
6
7
|
非C++11版
|
7
8
|
```C++
|
1
cbeginとcendはC\+\+11からなので訂正
answer
CHANGED
@@ -23,12 +23,12 @@
|
|
23
23
|
|
24
24
|
std::string str;
|
25
25
|
str.reserve(targetStr.length());
|
26
|
-
auto iter = targetStr.
|
26
|
+
auto iter = targetStr.begin();
|
27
|
-
while(iter != targetStr.
|
27
|
+
while(iter != targetStr.end())
|
28
28
|
{
|
29
|
-
auto iter2 = std::find_if(iter, targetStr.
|
29
|
+
auto iter2 = std::find_if(iter, targetStr.end(), IfCrLf());
|
30
30
|
str.append(iter, iter2);
|
31
|
-
iter = std::find_if(iter2, targetStr.
|
31
|
+
iter = std::find_if(iter2, targetStr.end(), IfNotCrLf());
|
32
32
|
}
|
33
33
|
targetStr.swap(str);
|
34
34
|
```
|