• ベストアンサー

C++で文字列の右端から特定の文字までの文字列を

C++で文字列の中から,文字列の右端から特定の文字までの文字列を取り出すというものを作りたいと思っています。 右端から○文字取り出す。といった感じのコードは書けるのですが、特定の文字まで、というのがどうもうまくいきません。こちら、良いアドバイスをいただける方がいましたらよろしくお願いします。 例:ファイル名を抽出 文字列\system32\notepad.exeからnotepad.exeの部分だけを取り出したい。というものです。 初めに見つけた\まで取り出す・・とやればよいのでしょうが、その方法が今ひとつ良くわからないので、どうかご助力お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

具体的なコードにもよりますが、 > 右端から○文字取り出す。といった感じのコードは書けるのですが だったら、ほぼできていると思います。 char src[1000]; に文字列が入っているとして、 そのコードに、 int j = src[] にある、最後の文字を示すインデックス for(int i = 0; i < ○; i++) { src[j] を取り出す; j--; } という部分があるなら、 while(src[j] != '\\') に書き直すだけ。 または、 for(int j = src[] にある、最後の文字を示すインデックス; (j >=0 ) && src[j] != '\\'; j--) にするとか。 でも、「どうもうまくいきません」なら、「こういうことをしたら、こうなってしまいました」というのがあるほうが親切ですね。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

次のようにします。 #include <iostream> #include <string> int main() {  std::string s("\\system32\\notepad.exe");  std::string::size_type pos = s.find_last_of('\\');  std::cout << s.substr(pos + 1) << std::endl; }

回答No.2

※文字列をchar型の配列およびchar型のポインタで保持している場合のケースについてです。 strrchrという関数があります。 が、Shift_JISコードの場合、2つのコードで1つの文字を表すものがあり、その後ろのコードに'\'と同じコードが使われることがあります。 ですので、strchrを扱うと意図しない位置を取得する可能性があります。 Visual C++ であれば、Shift_JISコード(マルチバイト)用の_mbsrchrという関数を使ったほうがよいです。 http://msdn.microsoft.com/ja-jp/library/ftw0heb9%28v=vs.80%29.aspx 対象の文字列が完全にファイルのフルパスであれば、splitpathって関数が使えるのですが。

関連するQ&A

専門家に質問してみよう