2017-06-19 1 views
0

大きな文字列(ファイルではない)の空行を削除したいと思います。 これは文字列です:大きな文字列の空行を削除する

The unique begin of a line in my string, after that a content same endline 


     The unique begin of a line in my string, after that a content same endline 
     The unique begin of a line in my string, after that a content same endline 

これは、それが++メモ帳に表示される方法です:

Notepad

+2

あなたは '、'、 '彼らはゴミが含まれているので、NumberDoubleReturnCaractere'をNumberReturnCaractere'をOldCaractere'を初期化することはありません。 – VTT

+0

strstrを使用して\ n \ nやそのようなものを探すのはどうしてですか? – ArBel

+0

この要件があるので、デザインを 'std :: vector ' 'または' std :: list > 'に変更できます。ここで、外側のコンテナの各要素は元のテキストの1行ですか? –

答えて

0

ソリューション:

string myString = "The string which contains double \r\n \r\n so it will be removed with this algorithm."; 
int myIndex = 0; 
while (myIndex < myString.length()) { 
    if (myString[myIndex] == '\n') { 
    myIndex++; 
    while (myIndex < myString.length() && (myString[myIndex] == ' ' || myString[myIndex] == '\t' || myString[myIndex] == '\r' || myString[myIndex] == '\n')) { 
     myString.erase(myIndex, 1); 
    } 
    } else { 
    myIndex++; 
    } 
} 
+0

このコードにはいくつかのバグがあります:1)符号付きデータ型と符号なしデータ型の比較。 2)空の行だけでなく、空白に続く行の先頭からすべての空白文字も削除します。 3)空の行が多い長い文字列が必要な場合は、文字列を移動する 'erase()'呼び出しが多くなり、パフォーマンスが低下します。 –

3

使用する正規表現。 regex referenceへのリンクをたどったら、あなたが始めるはずです。それとももっと良いregex_replace

あなたの正規表現は、役に立つオンラインregex testerかもしれません正規表現のテストのために、この

/\n\s*\n/ 

のようになります。

#include <iostream> 
#include <string> 
#include <regex> 

int main() 
{ 
    std::string s ("there is a line \n \nanother line\n \nand last one in the string\n"); 
    std::regex e ("\\n\\s*\\n"); 
    std::cout << std::regex_replace (s,e,"\n"); 
    return 0; 
} 
+0

こんにちは、あなたの応答のおかげで、私は私の場合にそれを使用する方法を理解していない、あなたは私に働くコードを与えることができますか? – Anonyme

+0

私の編集したポストの例を見てください。元のregex_searchの代わりにregex_replaceへの参照を変更しました。 –

関連する問題