最も簡単な方法は、std::remove_copy
アルゴリズムを使用することですあなたはすべてのスペースだけでなく' '
文字を削除する場合ではなく、ジェームズの提案を1として
...ポインタを取得するためにc_str()
を使用し、その後EDITを文字列からスペースを削除して、あなたはを使用することができますファンクタを使って10。私は直接<locale>
ヘッダからstd::isspace
を渡してテストして、動作しているようですが、私は、これは(負であるかもしれない)非ASCII文字で問題になることはないだろうことを確認していない:
#include <locale>
#include <algorithm>
int main() {
std::string s = get_ip_address();
char ip[20];
*std::remove_copy_if(s.begin(), s.end(), ip, (int (*)(int))std::isspace) = 0; // [1]
}
恐ろしい最後の引数にキャストすると、特定のオーバーロードを選択する必要があります。isspace
[1]文字列のNUL終了を確実にするために、*... = 0;
を追加する必要があります。 remove_copy
およびremove_copy_if
アルゴリズムは、出力シーケンス(つまり、最後の要素を超えたもの)のイテレータをend
に返します。*...=0
は、NULを書き込むイテレータを参照していません。あるいは、アルゴリズムchar ip[20] = {};
を呼び出す前に配列を初期化することはできますが、文字列の末尾だけでなく、配列内のすべての20文字に\0
を書き込むことになります。
もう少し冗長ですが、' remove_copy_if'と標準からの 'isspace'関数の1つを使った' IsNotSpace'関数オブジェクトを使います。 (一般に、空白を取り除きたい場合、空白文字だけでなく空白文字も意味します。) –
@JamesKanze:良い点。 –
あなたの例で@DavidRodríguez – yasin