教えて! goo のコンテンツに対する取り組みについて

C++で文字列の中から,文字列の右端から特定の文字までの文字列を取り出すというものを作りたいと思っています。

右端から○文字取り出す。といった感じのコードは書けるのですが、特定の文字まで、というのがどうもうまくいきません。こちら、良いアドバイスをいただける方がいましたらよろしくお願いします。

例:ファイル名を抽出
文字列\system32\notepad.exeからnotepad.exeの部分だけを取り出したい。というものです。
初めに見つけた\まで取り出す・・とやればよいのでしょうが、その方法が今ひとつ良くわからないので、どうかご助力お願いいたします。

gooドクター

A 回答 (3件)

具体的なコードにもよりますが、



> 右端から○文字取り出す。といった感じのコードは書けるのですが

だったら、ほぼできていると思います。

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--)

にするとか。

でも、「どうもうまくいきません」なら、「こういうことをしたら、こうなってしまいました」というのがあるほうが親切ですね。
    • good
    • 0

次のようにします。



#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;
}
    • good
    • 0

※文字列をchar型の配列およびchar型のポインタで保持している場合のケースについてです。



strrchrという関数があります。

が、Shift_JISコードの場合、2つのコードで1つの文字を表すものがあり、その後ろのコードに'\'と同じコードが使われることがあります。
ですので、strchrを扱うと意図しない位置を取得する可能性があります。

Visual C++ であれば、Shift_JISコード(マルチバイト)用の_mbsrchrという関数を使ったほうがよいです。
http://msdn.microsoft.com/ja-jp/library/ftw0heb9 …


対象の文字列が完全にファイルのフルパスであれば、splitpathって関数が使えるのですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング