ページ 11

string.end()を数字に変換したい

Posted: 2016年2月16日(火) 19:45
by pocket
お世話になっております.

今回はstringについて質問させていだきます.
c++歴は1年ほどの若輩です.
以下のようなプログラムを作成しました.
特定の文字列から,255.255.255.255を切り出して別の変数に格納したいです.

コード:

std::string str="AAA IP:255.255.255.255"
std::string temp=str.substr(str.find("IP:")+3,str.end())
しかし,下記のようなエラーが出ます.
エラー: no matching function for call to 'std::basic_string<char>::substr(std::basic_string<char>::size_type, std::basic_string<char>::iterator)'

おそらくイテレータと数字を混ぜているのが原因だと思いました.
なので,str.end()を数字(?)に変換したいです.
その方法を教えていただきたいです.

また,この問題を解決する別の方法があれば,併せてご教授いただければ幸いです.

環境はgcc(g++)です.
よろしくお願いいたします.

Re: string.end()を数字に変換したい

Posted: 2016年2月16日(火) 19:57
by usao
substrの第二引数って切出す文字列の長さを指定するのではないでしょうか.
findの結果と,元々の文字列の長さから計算できると思います.

Re: string.end()を数字に変換したい

Posted: 2016年2月16日(火) 20:47
by みけCAT
pocket さんが書きました:しかし,下記のようなエラーが出ます.
エラー: no matching function for call to 'std::basic_string<char>::substr(std::basic_string<char>::size_type, std::basic_string<char>::iterator)'

おそらくイテレータと数字を混ぜているのが原因だと思いました.
変なことを考える前にリファレンスを見ましょう。

string::substr - C++ Reference
string::find - C++ Reference

イテレータは直接関係なく、size_t型の値を渡すべき場所にsize_tに変換できないデータを渡しているのが原因ですね。
もしもイテレータと数字を混ぜているのが原因なら、イテレータに統一しても上手くいくでしょう。
pocket さんが書きました:また,この問題を解決する別の方法があれば,併せてご教授いただければ幸いです.
単純に文字列を最後まで切り出したいのであれば、substrの第二引数を省略すればいいでしょう。

Re: string.end()を数字に変換したい

Posted: 2016年2月16日(火) 22:52
by pocket
usaoさん。
回答ありがとうございます。
usao さんが書きました:substrの第二引数って切出す文字列の長さを指定するのではないでしょうか.
findの結果と,元々の文字列の長さから計算できると思います.
ご指摘の通り、切り出す文字列の長さでした。
第2引数が切り出したい文字のインデックスだと勘違いしていました。

みけCATさん。
回答ありがとうございます。
リファレンスを確認せずに、サンプルプログラムだけ見て使い方を勘違いしていたようです。

皆さんありがとうございました。