質問編集履歴

1 コードがおかしかったので修正しました

evans

evans score 40

2016/05/08 22:56  投稿

[C++][std::string]std::string型の文字列の改行コードを高速で取り除く方法について
###前提・実現したいこと
c++のstd::string型の文字列に含まれる改行コードのみを高速で取り除きたい
c++11, c++14の機能は使用せず実現したい
###発生している問題・エラーメッセージ
改行を含む文字ファイルをstd::stringに読み込み、findメソッドで改行コードを先頭から検索→見つかるたびにreplaceメソッドで空文字に置換するような処理を作成しました。
元データが10万行を超えるような長いものになるととても時間がかかるのですが、より良い方法はないでしょうか。
よろしくお願いいたします。
###該当のソースコード
```c++
//あらかじめstd::string targetStrに対象の文字列が読み込まれているものとする。
const std::string CRLF = "\r\n";
const std::string CR = "\r";
const std::string LF = "\n";
std::string::size_type pos = 0;
while(pos = targetStr.find(CRLF, pos), pos != std::string::npos) {
   targetStr.replace(pos,CRLF.length(), "");
   pos += CRLF.length();
}
pos = 0;  
while(pos = targetStr.find(CR, pos), pos != std::string::npos) {
   targetStr.replace(pos,CR.length(), "");
   pos += CR.length();
}
pos = 0;  
while(pos = targetStr.find(LF, pos), pos != std::string::npos) {
   targetStr.replace(pos,LF.length(), "");
   pos += LF.length();
}
```
###補足情報(言語/FW/ツール等のバージョンなど)
cまたはc++
ただしc++11, c++14の機能は使用せず実現したい
  • C++

    4659 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • CRLF

    7 questions

    CRLFは、改行コードのことです。 改行コードは、改行を表す制御文字です

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る