2016-07-12 1 views
0

私のコードには少し問題があります。私のコードでは、。、:および;を除くすべての英数字以外の文字を削除する必要があります。新しい行にドットで終わる行をソートします。だから、のようなもの:ドットで終わるソート行(。)

First, some characters, legal and illegal:)(=8skf-=&. This should be on a separate line. This too. 

はなる:

First, some characters, legal and illegal: 8skf. 
This should be on a separate line. 
This too. 

、非英数字は完璧に動作ストリップコードの最初の部分。ソート部はあるポイントまで動作します。だから、私のコードでは、上記の行は、実際には次のようになります。

First, some characters, legal and illegal: 8skf. 
This should be on a separate line. This too. 

私は、これは新しいラインで、私のコードは、新しい行になる過程でそれを読むことができないためであると理解しています。コードは次のとおりです。

int writeFinalv(string path) { 
    readTempFiles(path.c_str()); 
    string line; 
    string nline; 
    int start; 
    int lnth; 
    ifstream temp("temp.txt"); 
    ofstream final; 
    int length; 
    final.open(path.c_str(), ios::out | ios::trunc); 
    if(temp.is_open()) { 
     while(getline(temp, line)) { 
      length = line.length(); 
      for(int i = 0; i < length; i++) { 
       if(line[i] == '.') { 
        if(line[i+1] == ' ') { 
         nline = line.substr(0, (i+2)); 
        } 
        else { 
         nline = line.substr(0, (i+1)); 
        } 
        final << nline << "\n"; 
        start = line.find(nline); 
        lnth = nline.length(); 
        line.erase(start, lnth); 
       } 
       } 
      } 
     } 
    else { 
     error = true; 
    } 
    return 0; 
} 

私のコードでは、まず、最初のファイルを読み込み、関数を呼び出すことによって動作し、不正な文字でそれを取り除き、一時ファイルに書き込みます。次に、一時ファイルを読み込み、ドットを見つけて、最初のファイルに切り捨てた後に新しい行を書き出します。 ありがとうございます。

+0

あなたの質問は何ですか? –

答えて

1

forループ内のline文字列の一部を消去すると、ループインデックスが無効になります。 ilengthの両方に、forループを継続するために確実に使用できる値が保持されなくなりました。

実際には文字列を消去する必要はありません。現在の開始位置を追跡し、それをsubstrコールの最初のパラメータとして使用できます。

+0

基本的には、消去部分をループから外すか、開始位置を追跡しますか? – Quantomic

+0

@CrAzYPiLoT: 'erase'呼び出しを取り除き、現在の行の先頭を追跡します。 –

+0

これはちょっと動作します。今私は得る: 'まず、いくつかの文字、法的および違法:8skf。 ' 'まず、いくつかの文字、法的および違法:8skf。これは別の行に表示する必要があります。 ' 'まず、いくつかの文字、法的および違法:8skf。これは別の行に表示する必要があります。これも。 消去呼び出しをしないですべてのコードを持つ前に、この結果が得られました。 – Quantomic

関連する問題