2016-03-31 21 views
1

Kullanıcıya programımdaki ana işlevde bir dize girmesini ve userString saklamasını istedim ve kaç kelimenin olduğunu görüntülemek istiyorum.Dizgideki kelimelerin sayısı nasıl sayılır?

int countWords(string d) { 
    string words = " "; 
    for (int e = 0; e < d.length(); e++) { 
     if (isspace(d[e])) { 
      cout << "The string " << words << "word(s). "; 
     } 
    } 
    return words; 
} 

ben işlevi aslında (ben isspace() kullanıldığında neden) beyaz alanların sayısını gerektiğini okumuştum değil, kelimelerin kendileri:

Bu

Ben ana gelen çağrı niyetinde işlevdir .

Dize içindeki sözcüklerin sayısını saymayı ve aynı işlevde göstermeyi nasıl yaparım? Anlamakta zorlanıyorum ve hata alıyorum.

Ayrıca kitaplık işlevlerini kullanamıyorum.

Beklenen çıkışı:

  • dize "2020" bir kelime var.
  • "Hello guys" dizesinin iki sözcüğü var.
+2

İşlevlerinizin üstüne bir "int count = 0;" ekleme ve ardından kendi sınavlarınızla çalışmanızı öneririm d [e] 'nin her bir değeriyle karşılaştığınız zaman 'saymak' için ne olacağını hayal ederken kâğıt üzerinde ples (ve belki bir kaç tane daha fazla). Bunu kod içinde nasıl ifade edeceğinizden emin değilseniz, bu daha iyi bir soru olur, ancak eminim ki bir kişinin kelimelerden kaç tane çalışacağına dair bir mantık/algoritma çalışabilirsiniz. Mevcut kodunuzda ifade etme girişimi göremezsiniz. İpucu: kendinizi uzaydan harflere ve arkaya geçişlerle (yani, isspace (d [e)) &&! Isspace (d [e-1]) '. –

+0

ile ilgilendiğinizi görebilirsiniz. boşluklar –

cevap

1

içine basit kelimeler yerleştirecek boost::split() deneyin. düzenlemek

#include <cctype> 

... 

for(int i = 0; i < toParse.length(); i++){ 
    if (isblank(toParse[i])){ 
     //start new word 
    } 
    else if (toParse[i] == '.'){ 
     //start new sentence 
    } 
    else if (isalphanum(toParse[i])){ 
     //add to your current word 
    } 
} 

: sadece bazı koşulunu sağlayan bir aralıkta şey saymak istiyorsanız, Ayrıca //start new word.

0

Eğer boost kullanmak istemiyorsanız yapacak döngü, bir vektör

+0

sadece kelime sayısını elde etmek için bir kütüphane kullanın? Bu fazla yüke neden olacağını düşünmüyor musunuz? –

+0

Kütüphane işlevlerini kullanmasına izin verilmiyor, yaparsam atamadan puan alacağım – programmingstuffs

+0

Yakın bile değil Çoğunluğun bir kısmını yaptım, bu işlevle başım belada. Ödevimi yapmanı istediğimi nasıl ima ettim? Yardıma ihtiyacım var, bu forumun amacı nedir? – programmingstuffs

0

bkz bir tamsayı artırmak, sen std::count_if

düşünebilen Örnek:

int countWords(std::string d) 
{ 
    int w = std::count_if(d.begin(), d.end(), [](char ch) { return isspace(ch); }); 
    std::cout << "The string \"" << d << "\" has " << w + 1 << " words." << '\n'; 
    return w; 
} 
İlgili konular