回答編集履歴

3

indent修正

2016/05/08 16:02

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -14,29 +14,29 @@
14
14
 
15
15
  ```C++
16
16
 
17
- std::size_t n=0;
17
+ std::size_t n=0;
18
18
 
19
- std::string::iterator dst=targetStr.begin();
19
+ std::string::iterator dst=targetStr.begin();
20
20
 
21
- std::string::iterator end=targetStr.end();
21
+ std::string::iterator end=targetStr.end();
22
22
 
23
- for (std::string::iterator src=targetStr.begin() ; src != end; ++src)
23
+ for (std::string::iterator src=targetStr.begin() ; src != end; ++src)
24
24
 
25
- {
25
+ {
26
26
 
27
- if ((*src == '\r') || (*src == '\n'))
27
+ if ((*src == '\r') || (*src == '\n'))
28
28
 
29
- continue;
29
+ continue;
30
30
 
31
31
 
32
32
 
33
- *dst++=*src;
33
+ *dst++=*src;
34
34
 
35
- ++n;
35
+ ++n;
36
36
 
37
- }
37
+ }
38
38
 
39
- targetStr.resize(n);
39
+ targetStr.resize(n);
40
40
 
41
41
  ```
42
42
 

2

ミス修正

2016/05/08 16:02

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  std::string::iterator end=targetStr.end();
22
22
 
23
- for (std::string::iterator src=targetStr.begin() ; src != end; ++src, ++n)
23
+ for (std::string::iterator src=targetStr.begin() ; src != end; ++src)
24
24
 
25
25
  {
26
26
 
@@ -32,6 +32,8 @@
32
32
 
33
33
  *dst++=*src;
34
34
 
35
+ ++n;
36
+
35
37
  }
36
38
 
37
39
  targetStr.resize(n);

1

リベンジ

2016/05/08 16:00

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -3,3 +3,41 @@
3
3
 
4
4
 
5
5
  string::find_first_of()でCRとLFの最初に出現したものをサーチしつつ、リプレースすれば1パスで済むので1.5倍強くらいの速度になるだろうと思います。
6
+
7
+
8
+
9
+ ---
10
+
11
+ 【追記】
12
+
13
+ 文字は削除するだけなので、前方へコピーすれば済む筈です。
14
+
15
+ ```C++
16
+
17
+ std::size_t n=0;
18
+
19
+ std::string::iterator dst=targetStr.begin();
20
+
21
+ std::string::iterator end=targetStr.end();
22
+
23
+ for (std::string::iterator src=targetStr.begin() ; src != end; ++src, ++n)
24
+
25
+ {
26
+
27
+ if ((*src == '\r') || (*src == '\n'))
28
+
29
+ continue;
30
+
31
+
32
+
33
+ *dst++=*src;
34
+
35
+ }
36
+
37
+ targetStr.resize(n);
38
+
39
+ ```
40
+
41
+ 最後のresize()で変なコピーしないかちょっとだけ心配ですが、縮める方向なので管理領域を書き換えるだけと期待。
42
+
43
+