回答編集履歴
3
indent修正
answer
CHANGED
@@ -6,17 +6,17 @@
|
|
6
6
|
【追記】
|
7
7
|
文字は削除するだけなので、前方へコピーすれば済む筈です。
|
8
8
|
```C++
|
9
|
-
|
9
|
+
std::size_t n=0;
|
10
|
-
|
10
|
+
std::string::iterator dst=targetStr.begin();
|
11
|
-
|
11
|
+
std::string::iterator end=targetStr.end();
|
12
|
-
|
12
|
+
for (std::string::iterator src=targetStr.begin() ; src != end; ++src)
|
13
|
-
|
13
|
+
{
|
14
|
-
|
14
|
+
if ((*src == '\r') || (*src == '\n'))
|
15
|
-
|
15
|
+
continue;
|
16
16
|
|
17
|
-
|
17
|
+
*dst++=*src;
|
18
|
-
|
18
|
+
++n;
|
19
|
-
|
19
|
+
}
|
20
|
-
|
20
|
+
targetStr.resize(n);
|
21
21
|
```
|
22
22
|
最後のresize()で変なコピーしないかちょっとだけ心配ですが、縮める方向なので管理領域を書き換えるだけと期待。
|
2
ミス修正
answer
CHANGED
@@ -9,12 +9,13 @@
|
|
9
9
|
std::size_t n=0;
|
10
10
|
std::string::iterator dst=targetStr.begin();
|
11
11
|
std::string::iterator end=targetStr.end();
|
12
|
-
for (std::string::iterator src=targetStr.begin() ; src != end; ++src
|
12
|
+
for (std::string::iterator src=targetStr.begin() ; src != end; ++src)
|
13
13
|
{
|
14
14
|
if ((*src == '\r') || (*src == '\n'))
|
15
15
|
continue;
|
16
16
|
|
17
17
|
*dst++=*src;
|
18
|
+
++n;
|
18
19
|
}
|
19
20
|
targetStr.resize(n);
|
20
21
|
```
|
1
リベンジ
answer
CHANGED
@@ -1,3 +1,21 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
string::find_first_of()でCRとLFの最初に出現したものをサーチしつつ、リプレースすれば1パスで済むので1.5倍強くらいの速度になるだろうと思います。
|
3
|
+
string::find_first_of()でCRとLFの最初に出現したものをサーチしつつ、リプレースすれば1パスで済むので1.5倍強くらいの速度になるだろうと思います。
|
4
|
+
|
5
|
+
---
|
6
|
+
【追記】
|
7
|
+
文字は削除するだけなので、前方へコピーすれば済む筈です。
|
8
|
+
```C++
|
9
|
+
std::size_t n=0;
|
10
|
+
std::string::iterator dst=targetStr.begin();
|
11
|
+
std::string::iterator end=targetStr.end();
|
12
|
+
for (std::string::iterator src=targetStr.begin() ; src != end; ++src, ++n)
|
13
|
+
{
|
14
|
+
if ((*src == '\r') || (*src == '\n'))
|
15
|
+
continue;
|
16
|
+
|
17
|
+
*dst++=*src;
|
18
|
+
}
|
19
|
+
targetStr.resize(n);
|
20
|
+
```
|
21
|
+
最後のresize()で変なコピーしないかちょっとだけ心配ですが、縮める方向なので管理領域を書き換えるだけと期待。
|