Metin dosyaları olarak kaydedilmiş bazı verileri ayrıştırmak için bir program yazıyorum. Yapmaya çalıştığım şey, samanlıkta her iğnenin yerini bulmak. Dosyayı zaten okuyabilirim ve olay sayısını belirleyebilirim, ancak indeksi de bulmak istiyorum. Ben yazınızı yanlış yorumlamakTüm bir alt dizenin oluşumları ve konumlarını bul
cevap
string str,sub; // str is string to search, sub is the substring to search for
vector<size_t> positions; // holds all the positions that sub occurs within str
size_t pos = str.find(sub, 0);
while(pos != string::npos)
{
positions.push_back(pos);
pos = str.find(sub,pos+1);
}
Düzenleme , sen alt dize söyledi, ben size bir dize arama yapıyor anlamına geliyordu üstlendi. Dosyayı bir dizgeye okursanız, bu yine de çalışır.
= dosya 100GB uzunsa ne olur? Bu hala çalışıyor mu? –
Dosya çok uzun değil. Bu mükemmel çalışmalı :) teşekkürler! –
@Steve - Eğer 100GB dosyasını dediğim gibi bir dizeye okuyabiliyorsa, o zaman işe yarayacaktır. –
Ben bir cevap kabul edildi biliyorum, ama bu aynı zamanda çalışacak ve
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
const char foo[] = "foo";
const size_t s_len = sizeof(foo) - 1; // ignore \0
char block[s_len] = {0};
ifstream f_in(<some file>);
vector<size_t> f_pos;
while(f_in.good())
{
fill(block, block + s_len, 0); // pedantic I guess..
size_t cpos = f_in.tellg();
// Get block by block..
f_in.read(block, s_len);
if (equal(block, block + s_len, foo))
{
f_pos.push_back(cpos);
}
else
{
f_in.seekg(cpos + 1); // rewind
}
}
}
- 1. Dize ara - Tüm oluşumları bul PHP
- 2. Belirli bir alt dizenin tüm indekslerini döndürme
- 3. Sed, neden tüm oluşumları değiştirmez?
- 4. İki dizge arasındaki tüm alt dizeleri bul
- 5. Regex, yalnızca dizenin ortasındaki kalıbı bul
- 6. İki dizenin içine bir alt dizgi alın
- 7. PHP ile bir dizede c2a0'nın tüm oluşumları nasıl kaldırılır?
- 8. bul ve bul EndekslenmişDB'de
- 9. Kabuk betikindeki bir dizedeki tüm nokta oluşumları nasıl kaldırılır?
- 10. Tüm oluşumları sed kullanılarak tek bir desenle değiştirin
- 11. Bir dizenin tüm oluşumlarının stilini değiştirme
- 12. XCode Tüm proje dosyalarında bul ve değiştir
- 13. Tüm bul ve kaldır mongo/mongoid
- 14. gerritimdeki tüm değişiklikleri bul
- 15. Bir dizenin tüm karakterleri için doğru
- 16. PostgreSQL'de bir dizedeki bir alt dizenin yineleme sayısını sayma
- 17. Tüm olası dizi endeks konumlarını verimli bir şekilde alma
- 18. Bir jQuery sortable öğesindeki tüm öğelerin konumlarını takip edin
- 19. Bir projedeki dll tüm referanslarını bul
- 20. Bir dizgede yinelenen karakterleri denetleme ve konumlarını sayısallaştırma
- 21. pydev: bir fonksiyona ilişkin tüm referansları bul
- 22. "mark oluşumları" çalışmıyor Eclipse Juno
- 23. Selenyum - Bir web sayfasının tüm öğelerini bul
- 24. Lua'da bir nesneye ait tüm referansları bul
- 25. Dizideki sözcüğün tüm oluşumlarını bul
- 26. Bir dizenin kapsüllenmiş bölümlerini ayırma/tanımlama C# (alt dizeleri belirleme)
- 27. jQuery: Tüm gerekli alanları bul
- 28. Python'da bir dizenin sonundan bir alt dizeyi nasıl kaldırırım?
- 29. Bir bash kabuk betiği değişkeninde bir alt dizenin bulunması
- 30. Tüm .php dosyalarını yinelenen klasörde bul
Daha fazla detay lütfen .. Eğer bir dizeye dosyaya yüklenmek zorunda kurtaracak. Bir kod örneği, yapmaya çalıştığınız şeyi anlamak için çok yardımcı olacaktır. –
kod değilse, daha küçük bir örnek giriş için çıktı –