2012-05-12 18 views
14

Mesela ben std::string bazı dosyaya UNIX tarzı yolunu içeren olduğunu varsayalım Bu dizeden blah 'klasörü. Yani bu dizgeyi kestirmenin etkili olduğunu ('hiç' kopya 'olmaksızın' etkili 'demek) sadece "/first/second/blah" içerecek şekilde var mı?Verimli yolu N

Şimdiden teşekkürler. N biliniyorsa

cevap

30

N bilinen değilse

path.erase(N, std::string::npos); 

kullanabilir ve bunu bulmak istediğiniz, arama fonksiyonları herhangi birini kullanabilirsiniz. Bu durumda size 'son çizgi bulmak isteyeceksiniz, bu yüzden rfind veya find_last_of kullanabilirsiniz:

path.erase(path.rfind('/'), std::string::npos); 
path.erase(path.find_last_of('/'), std::string::npos); 

Yineleyicilerin dayanarak bu bile varyasyon vardır: eğer

path.erase (path.begin() + path.rfind('/'), path.end()); 

, dedi ki Bir yaşam için yolları manipüle edecekler, bu görev için tasarlanmış bir kütüphaneyi kullanmak daha iyidir, örneğin Boost Filesystem.

+0

Tam olarak ne istedim! Bunu yapmanın _beautiful_ yolu olması gerektiğini biliyordum :) Teşekkürler. – tonytony

+0

Ya da çok güzel yollar :) – chris

+0

Std :: npos yerine std :: string :: npos cevabını düzenledim. npos, std :: string not std öğesinin bir üyesidir –

İlgili konular