1

この問題が頻繁に発生することは知っていますが、うまく機能するコードが見つかりませんでした。

文字列ライブラリの find_first_not_of メソッドと find_last_not_of メソッドを使用して、着信文字列からすべての句読点を取り除こうとしています。

//
//strip punctuation characters from string
//
void stripPunctuation(string &temp)
{
    string alpha = "abcdefghijklmnopqrstuvwxyz";

    size_t bFound = temp.find_first_not_of(alpha); 
    size_t eFound = temp.find_last_not_of(alpha);

    if(bFound != string::npos)
        temp.erase(temp.begin());
    if(eFound != string::npos)
        temp.erase(temp.end());
}

基本的に、アルファベットではない文字列の先頭とアルファベットではない文字列の末尾にあるものはすべて削除したいと考えています。この関数が呼び出されると、セグメンテーション違反が発生します。bFound と eFound をどこに渡す必要があるかわかりません。

4

1 に答える 1

1

.end()を渡さないでください。これは、終了を表す無効なイテレータを指しています。文字列の最後の文字を削除する場合は、temp.erase(temp.length()-1)を使用します。私があなたを正しく理解していれば。

編集:

Erase()はイテレータのみを受け入れるようです。これは私が最初に考えたものです。

それは真実ではありません:

string& erase ( size_t pos = 0, size_t n = npos );
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );

http://www.cplusplus.com/reference/string/string/erase/

于 2011-07-20T00:31:22.390 に答える