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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pocket
記事: 49
登録日時: 9年前

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

#1

投稿記事 by pocket » 9年前

お世話になっております.

今回は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++)です.
よろしくお願いいたします.

アバター
usao
記事: 1892
登録日時: 12年前
連絡を取る:

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

#2

投稿記事 by usao » 9年前

substrの第二引数って切出す文字列の長さを指定するのではないでしょうか.
findの結果と,元々の文字列の長さから計算できると思います.

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 9年前

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の第二引数を省略すればいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

pocket
記事: 49
登録日時: 9年前

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

#4

投稿記事 by pocket » 9年前

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る