İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. SDN Programlama Kafe
SDN Programlama Kafe

C/C++ Int Array Parsing

Ben Kenobi31.01.20175 cevap1.064 görüntüleme
2011'den beri7.329 mesaj
#1
Elimde şöyle bir metin var.

pSphere1.vtx[255]
pSphere1.vtx[275:280]
pSphere1.vtx[295]
pSphere1.vtx[297]
pSphere1.vtx[315]

Bu metin içindeki rakamları bulup array içerisine atamak istiyorum, eğer ki üst üste iki nokta varsa bunun sağındaki ve solundaki aralık üzerinde bulunan tüm örnekleri dahil etmek istiyorum.
Bu metin için sonuç şöyle bir int array olmalı.

255
275
276
277
278
279
280
295
297
315

Bunu C veya C++ en rahat ve performanslı nasıl yapabilirim ?
Cevaplar
2016'den beri694 mesaj
#2
Merhaba,

konuyu anlamak adına soracağım; pSphere1.vtx[255] bir dosyamı yoksa, bunu bir dosyadan mı okuyacaksınız ? Yoksa sadece elinizde char/string tiplerden birisi mi var ?

Saygılarımla
Ben Kenobi Konuyu açan
2011'den beri7.329 mesaj
#3
errno dedi: ↑
Merhaba,

konuyu anlamak adına soracağım; pSphere1.vtx[255] bir dosyamı yoksa, bunu bir dosyadan mı okuyacaksınız ? Yoksa sadece elinizde char/string tiplerden birisi mi var ?

Saygılarımla
Hayır dosyadan okumayacağım.
Bu veri bana başka bir fonksiyondan gelecek.
Veri tipi standart char *
2016'den beri694 mesaj
#4
Merhaba,

kusura bakma geç dönüş yaptım ama geri çıkmam gerekiyor. Kısa zamanda yapmaya çalıştım, eksikleri olabilir mesela chr * tipine siz çevirirsiniz. Aslında ilk yazdığımı const char * ile yazmıştım sildim bunu yazdım. Üzerinde birkaç oynama ile hem c hem c++ da (vector için) çalıştırılabilir sanıyorum ki. Ya da kodlar daha da kısaltılabilirdi C++ lambda ile ama kafa karıştırmaya gerek yok.

#include <iostream>
#include <vector>
#include <string>
#include <cstring>

void GetNumberFromText()
{
vector<string> arr = { "pSphere1.vtx[255] pSphere1.vtx[275:280] pSphere1.vtx[295] pSphere1.vtx[297] pSphere1.vtx[315]" };
string str2 = "[";
vector<int> destArr(0, 100);
string str;

int counter = arr[0].find(str2) + 1;

for (size_t i = counter; i <= arr[0].size(); i++)
{
if (i == 0) break;

while (isdigit(arr[0]))
{
int x = 0;
str.push_back(arr[0]);
i++;
}
destArr.push_back(stoi(str));
str.clear();

if (arr[0] == ':')
{
++i;

while (isdigit(arr[0]))
{
int x = 0;
str.push_back(arr[0]);
i++;
}

for (size_t x = destArr[destArr.size() - 1]; x < stoi(str) - 1;)
{
x++;
destArr.push_back(x);
}

destArr.push_back(stoi(str));
str.clear();
}
i = arr[0].find(str2, i);
}

//konsola yazdırma
for (size_t i = 0; i <= destArr.size() - 1; i++)
{
cout << destArr << endl;
}
};

Saygılarımla

Edit : Tahmin etmişsinizdir; göz kırpma olan yerde noktalı virgül ve ardından parantez kapama var. Bir türlü beceremedim şu editörü kullanmayı..
Ben Kenobi Konuyu açan
2011'den beri7.329 mesaj
#5
errno dedi: ↑
Merhaba,

kusura bakma geç dönüş yaptım ama geri çıkmam gerekiyor. Kısa zamanda yapmaya çalıştım, eksikleri olabilir mesela chr * tipine siz çevirirsiniz. Aslında ilk yazdığımı const char * ile yazmıştım sildim bunu yazdım. Üzerinde birkaç oynama ile hem c hem c++ da (vector için) çalıştırılabilir sanıyorum ki. Ya da kodlar daha da kısaltılabilirdi C++ lambda ile ama kafa karıştırmaya gerek yok.

#include <iostream>
#include <vector>
#include <string>
#include <cstring>

void GetNumberFromText()
{
vector<string> arr = { "pSphere1.vtx[255] pSphere1.vtx[275:280] pSphere1.vtx[295] pSphere1.vtx[297] pSphere1.vtx[315]" };
string str2 = "[";
vector<int> destArr(0, 100);
string str;

int counter = arr[0].find(str2) + 1;

for (size_t i = counter; i <= arr[0].size(); i++)
{
if (i == 0) break;

while (isdigit(arr[0]))
{
int x = 0;
str.push_back(arr[0]);
i++;
}
destArr.push_back(stoi(str));
str.clear();

if (arr[0] == ':')
{
++i;

while (isdigit(arr[0]))
{
int x = 0;
str.push_back(arr[0]);
i++;
}

for (size_t x = destArr[destArr.size() - 1]; x < stoi(str) - 1;)
{
x++;
destArr.push_back(x);
}

destArr.push_back(stoi(str));
str.clear();
}
i = arr[0].find(str2, i);
}

//konsola yazdırma
for (size_t i = 0; i <= destArr.size() - 1; i++)
{
cout << destArr << endl;
}
};

Saygılarımla

Edit : Tahmin etmişsinizdir; göz kırpma olan yerde noktalı virgül ve ardından parantez kapama var. Bir türlü beceremedim şu editörü kullanmayı..
Hocam teşekkür ederim, şu an için lazım değil ama ilerideki bir proje için lazım idi.
Bir ay sonra tekrar yazarsam şaşırma, tekrar teşekkürler, en azından parsinge adım atmış oldum.
Bu arada const tipi de olabilirdi, sorun olmazdı.
2016'den beri694 mesaj
#6
Merhaba,

üstad elimden geldiği sürece her zaman yanında olurum. Yeterki bilgiyi paylaşalım.

Saygılarımla

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.