2016-08-02 3 views
-6

文字列から特定の文字を削除しようとしていますが、問題があります。文字列からの文字の削除C++

Iveはreplace()を使用して文字を何も置き換えようとしませんでしたが、コンパイラはそのことについて不平を言います。

string s = "Hello, this is a test"; 
replace (s.begin(), s.end(), 'l', ''); 
cout << s; 

文字「l」を見つけて削除すると、「Heo、this is a test」と出力されます。 残念ながら、私はreplace()が使用するのが正しいとは思っていませんし、ちょっと困惑しています。数週間しかプログラミングを勉強していないので、これが愚かな質問であればごめんなさい。ありがとう:)

+0

なければならないことに注意してくださいは、[これを参照してください。リンク](http://www.cplusplus.com/reference/string/string/replace/)。 'replace'ではなく' s.replace'でなければなりません – GAVD

+2

あなたは私たちにエラーを表示できますか?私は確か** **それは**正確に**何が間違っているかを伝えることです。 @sinsuren '' 'は有効な文字ではないので、そうではありません。 –

+4

[C++の文字列中のすべての文字を取り除く方法]の可能な複製(http://stackoverflow.com/questions/20326356/how-to-remove-all-the-occurrences-of-a-char-in) -c-string) –

答えて

-2

あなたが#include<algorithm>を追加したら、エラーメッセージは空の文字定数について文句を言うべきです。 null文字には'\0'を使用する必要があります。

std::replace (s.begin(), s.end(), 'l', '\0'); 

あなたがプログラミングに慣れていないので、私はむしろ、あなたのコードでusing namespace stdを持つよりも、機能と一緒に名前空間名を使用する方が良い(良い習慣)があることを教えてくれます。この回答あちこち@mindriotからのコメントを考慮

は、私は別のソリューションを提供することを好む:

s.erase(std::remove(s.begin(), s.end(), 'l'), s.end()) ; 

あなたはまた、他の関連オプションについてhereを見てすることができます。

+0

私はdownvoteの理由を知るかもしれない!! – Jackzz

+0

downvoterではありませんが、私はdownvoteに同意します:あなたの答えは ''1' 'のすべての出現を取り除くのではなく、'' \ 0 ''で_を置き換えます。それは同じではありません。それは '' 123123 "を' '\ 00023 \ 00023" 'に変換します。これは希望する' '2323 ''と同じではありません。また、NUL文字を追加すると、NULで終了する文字列があると予想される他のコードがあると、ブレークすることがあります。たとえば、 'std :: cout'に送信してみてください。 – mindriot

+0

@mindriot:私はあなたの2番目の点に同意します。しかし、そのようなものは問題に言及されていません。 – Jackzz

0

enter image description here

これはかなりstaightフォワードです。 こんにちはと置き換えたい場合は、HeoReplaceWord(str, "Hello", "Heo")という関数で呼び出します。

あなたは小文字の時間を使用している場合、それがすべてで置き換えることはありませんので、この例では、大文字と小文字が区別され、それは文句を言わない言葉を見つけ、それが大文字のH.

#include <iostream> 
#include <string> 
using namespace std; 


void ReplaceWord(std::string& source, const char* WordToFind, const char* WordToReplace); 

//program entry point 
int main(){ 

    cout<<""<<endl; 

    string str = "Hello, this is a test"; 

    cout<<"Before replace : "<<endl; 
    cout<<str<<endl; 
    cout<<""<<endl; 

    ReplaceWord(str, "Hello", "Heo"); 

    cout<<"After replace : "<<endl; 
    cout<<str<<endl; 

    cout<<""<<endl; 

return 0; 
} 


void ReplaceWord(std::string& source, const char* WordToFind, const char* WordToReplace){ 

    size_t LengthOfWordToReplace = strlen(WordToFind); 
    size_t replaceLen = strlen(WordToReplace); 
    size_t positionToSearchAt = 0; 

    //search for the next word 
    while ((positionToSearchAt = source.find(WordToFind, positionToSearchAt)) != std::string::npos) 
    { 
     //replace the found word with the new word 
     source.replace(positionToSearchAt, LengthOfWordToReplace, WordToReplace); 

     // move to next position 
     positionToSearchAt += replaceLen; 
    } 
} 
関連する問題