teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

indent修正

2016/05/08 16:02

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -6,17 +6,17 @@
6
6
  【追記】
7
7
  文字は削除するだけなので、前方へコピーすれば済む筈です。
8
8
  ```C++
9
- std::size_t n=0;
9
+ std::size_t n=0;
10
- std::string::iterator dst=targetStr.begin();
10
+ std::string::iterator dst=targetStr.begin();
11
- std::string::iterator end=targetStr.end();
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
- if ((*src == '\r') || (*src == '\n'))
14
+ if ((*src == '\r') || (*src == '\n'))
15
- continue;
15
+ continue;
16
16
 
17
- *dst++=*src;
17
+ *dst++=*src;
18
- ++n;
18
+ ++n;
19
- }
19
+ }
20
- targetStr.resize(n);
20
+ targetStr.resize(n);
21
21
  ```
22
22
  最後のresize()で変なコピーしないかちょっとだけ心配ですが、縮める方向なので管理領域を書き換えるだけと期待。

2

ミス修正

2016/05/08 16:02

投稿

Chironian
Chironian

スコア23274

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, ++n)
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

リベンジ

2016/05/08 16:00

投稿

Chironian
Chironian

スコア23274

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()で変なコピーしないかちょっとだけ心配ですが、縮める方向なので管理領域を書き換えるだけと期待。