• ベストアンサー

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

  • 特定文字列間の文字列の抽出の際についての質問なのですが、

    特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • sedなどで、特定の文字列の後の文字列を抽出したい

    sedなどで、特定の文字列の後の文字列を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。 echo abcXYZ123defghi | sed ... のようにして実行させたいです。

  • エクセル 特定の文字列を抽出・挿入

    例えば A列にあるセルの中から特定の文字列を検索・抽出して、その特定の文字列だけB列に挿入していく関数はありますか? またはA列にあるセルの中から特定の文字列に挟まれた文字列を検索・抽出してその特定の文字列だけB列に挿入していく関数はありますか? マクロを組まないと難しいのでしょうか?

  • OpenOfficeで文章から特定文字列を抽出する

    OpenOfficeを利用しています。 かなり異例なのですが、 ・文章の中に特定の文字列があるかを検索→ある場合はTrue、ない場合はFalce ・Trueの場合VLOOKUPでその文字列を参照として指定された数値を返す このようなことをやりたいのですが、なにかうまくやる方法はないでしょうか? マクロの知識がないのでできれば関数でお願いします。 そのような方法がなければ文章中の特定の文字列を抽出、その抽出した文字を参照としてVLOOKUPで指定された数値を返す、という方法でも構いません。 例として画像を添付しておきます。 例と言うよりは、実際に作ってるものなのですが…… A列からE列までをVLOOKUPで使う参照表とし、G列の文字列を検索値として、D列の数値をI列の結果として返したい、ということです。 よろしくお願いします。

  • C# 特定文字列まで削除の方法

    C#を初めて2週間ほどになります。 今組んでいるプログラミングで文字列内で先頭文字から特定の文字まで削除をしたいのですが、難しく苦戦しています。 B - 不要部分 A ‐必要部分 C- 特定文字 例 C:\BBBBBBBBBB\CCCAAAAAAAAAAAAAA.txt 先頭からCCCまで削除しCCCAAAAAAAAA.txtだけ残したいです。 もしない場合はCCCの先頭文字の位置を検索しRemoveで先頭からそのCCCの先頭文字で削除しようと考えています。 宜しくお願い致します。

  • 特定文字での文字化け

    DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。

  • 特定の文字列間を抽出(MAC)

    特定の文字列間の文字列を抽出したいのですがなにか いいソフトはありませんでしょうか?例えば、 <p>△△△</p> <span>◯◯◯</span> <span>□□□</span> という文があったら <span>◯◯◯</span> <span>□□□</span> もしくは ◯◯◯ □□□ を抽出したいのですが。 回答お待ちしています。

  • sedなどで、特定の文字列内の数値を抽出したい

    sedなどで、特定の文字列内の数値を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列内の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、job 999 at 2016-09-28 00:00のなかから、job ~ at内の「999」を抜き出したいです。 echo job 999 at 2016-09-28 00:00 | sed -e 's///g'... のようにして実行させたいです。

  • Accessで、メモ帳を新規で開いて文字を書き込みたい

    Access2003です。宜しくお願いします。 作成した文字列(リストのデータをリストタイトルと混ぜて作成した文字列)をメモ帳を新規で開いて文字を書き込みたいと思っています。 Shell "c:\windows\system32\notepad.exe", vbNormalFocus DoEvents SendKeys "ほにゃらら" と書いたのですが、メモ帳は開きますが文字が入りません。 分かる方いらっしゃいましたら、お願いいたします。

専門家に質問してみよう