2016-05-24 13 views
-1

私はファイル名のリストをC++で文字列として持っています。私はこれをベクターに保存します。find_last_ofを使ってファイル名を検索する

vector<string> files; 

.find_last_ofを使用して、拡張子を取得します。

for (int j = 0; j < files.size(); j++) 
    { 
     if (files[j].substr(files[j].find_last_of(".") + 1) == "tif") { 
      images.push_back(files[j]); 

     } 

これはすべて正常に動作します。さて、私は、ファイルに、extension.eg前に、ファイル名の最後の部分をチェックする必要があります。

FileName.1001.tif 

私は、私が試してみました'1001'

を取得するために探しています:

if (files[i].substr(files[i].find_last_of(".") - 1) == "1001") 
      { 
       std::cout << "yaaay..." << std::endl; 
      } 

しかし、決してヒットしません。ここで ' - 1'を使うことはできませんか?または私は何かを逃している?

+1

'ファイルを。 substr(files [i] .find_last_of( "。") - 1) 'は' '1.tif" 'です。 – LogicStuff

+0

ああ、私は見る!私は分割として扱っていた。だから '-4'を使うと '1001.tif'が得られ、文字列から.tifを取り除くことができます。ありがとうございました! – anti

+0

数字部分の長さは不明なので、数字を抽出するにはsscanfを使用する必要があります。 –

答えて

1

ロジック:

std::string getLastPart(const std::string &filename) 
{ 
    // Strip of the extension 
    auto name = filename.substr(0, filename.find_last_of('.')); 

    // Now get everything to the right of the last . 
    auto part = name.substr(name.find_last_of('.') + 1); 

    return part; 
} 

注:あなたは

は今、あなたが言うことができる .がない場合の取り扱い若干の誤差は...追加する必要があります。[i]は

if(getLastPart(files[i]) == "1001") 
{ 
    std::cout << "yaaay..." << std::endl; 
} 
+0

最初の 'std :: string :: substr'は、前に見つかった' .'の位置から-1を引いた2番目の 'std :: string :: find_last_of'を実行することで除去できます。 – LogicStuff

+1

ありがとう!これは完璧です。 – anti

1

あなたはこのように試すことができます:「最後を見つける」あなただけの拡張子を削除し、同じを適用する必要があなたの現在のアプローチに固執

if(files[i].substr (str.find("."),str.find_last_of(".")-str.find("."))== "1001") 

IDEONE DEMO

関連する問題