2016-03-20 5 views
0

C++ dizesi:Bölünmüş ipi ilk yarısını elde edebilmek olduğum komut std :: string :: substr

insert1 = tCreatureOne.substr(0, (tCreatureOne.length)/2 

ipi ikinci yarısını almak için nasıl bilmiyorum

İşte kodum. -

// Insert creature two in to the 
//middle of creature one.Science! 
// Hamster and Emu make a HamEmuster 

std::string PerformScience(std::string tCreatureOne, std::string tCreatureTwo) 

{ 

    std::string insert1; 
    std::string insert2; 
    std::string insert3; 


     // first half : 0 to middle 

     insert1 = tCreatureOne.substr(0, (tCreatureOne.length)/2); 

    // last half: from middle to the end 
     insert2 = tCreatureOne.substr((tCreatureOne.length)/2), tCreatureOne.length); 

     insert3 = insert1 + tCreatureTwo + insert2; 

    return insert3; 
+1

Tekrar 'substr()' çağırmadan yapamazsınız! [Bu] 'u kontrol edin (http://stackoverflow.com/questions/236129/split-a-string-in-c). – fordcars

+2

http://www.cplusplus.com/reference/string/string/substr/ adresinden 'string :: npos' aradığınızdan şüpheleniyorum. Yani insert2 = tCreatureOne.substr ((tCreatureOne.length)/2), std :: string :: npos); –

+4

@CraigYoung 'std :: string :: npos' zaten varsayılan değerdir. İkinci parametrenin belirtilmesi gerekli değildir. –

cevap

0

Muhtemelen en önemli geliştirici becerisi, çevrimiçi araştırmaların nasıl yapılacağını bilmek. "C++ substr" için bir google arama üst sonucunda bu ortaya koymaktadır: Parametreleri aşağıdaki gibi tanımlayan http://www.cplusplus.com/reference/string/string/substr/

bölümünde, len açıklanmıştır: karakterlerin

Numara alt dize dahil etmek (dize eğer Mümkün olduğunca çok sayıda karakter kullanıldığı için daha kısadır.
Dize :: npos değeri, dizenin sonuna kadar tüm karakterleri gösterir.

Yani yazabilirsiniz:

string substr (size_t pos = 0, size_t len = npos) const;

npos için len oldukça elverişli varsayılan Anlamı:

insert2 = tCreatureOne.substr(tCreatureOne.length()/2), std::string::npos); 

Ancak şöyle substr ilan unutmayın .
Bu nedenle daha basit yazabilirsiniz:

insert2 = tCreatureOne.substr(tCreatureOne.length()/2)); 

Ancak bile substr 'dizesi geri kalanını' belirterek böyle bir elverişli araçlara sahip değildi, aşağıdaki gibi hala bunu kolaylıkla hesaplanabilir olabilirdi:

int totalLength = tCreatureOne.length(); 
int firstLength = totalLength/2; 
int remainderLength = totalLength - firstLength; 

//So... 
insert2 = tCreatureOne.substr(tCreatureOne.length()/2), remainderLength); 
+0

Bir hata yaptım. TCreatureOne.length yerine tCreatureOne.length() yazmalıyım, yardımlarınız için teşekkür ederim, ur cevapları gerçekten bana yardım etme konusunda yardımcı oldu. –

0

πάντα ῥεῖ kendi yorumunda doğrudur dizenizle ikinci yarısını almak için, ikinci bir parametreyi (dize sonu) belirtmek gerekmez:

insert2 = tCreatureOne.substr(tCreatureOne.length()/2); 

Yukarıdaki çizgi mükemmel çalışır. Ayrıca, std::string'u kullandığınızdan, parantezleri length() aramasına eklemeyi unutmayın.

İlgili konular