Program liczący znaki w tekscie


(Moore96) #1
#include 

#include 

#include 


using namespace std;


/*procka do zliczania znaków*/


unsigned zliczznaki(string tekst, char znak)

{

   unsigned ilosc=0;


   for (unsigned i=0; i<=tekst.length() - 1; ++i)

   {

       if (tekst[i]==znak)

       ++ilosc;

   }

   return ilosc;

}   


/*główny program*/


int main ()

{


/*poproszenie o tekst oraz jaki znak ma być zliczony*/


  string napis;

  cout<<"Podaj tekst, w kt\242rym maj\245 by\206 zliczone znaki:";

  cin >>napis;


  char szukanyznak;

  cout<<"Podaj znak, kt\242 ma by\206 zliczony:";

  cin>>szukanyznak;


/*wypisanie ile jest znaków w tekscie*/


  cout <<"Znak '"<
       << zliczznaki (napis, szukanyznak)<<" raz(y)."; 


 /*wstrzymanie programu*/


  getch();

  return 0;   

}

Problem jest taki, że jak wpiszę dłuższy tekst np. Ala ma kota a kot ma Ale. to nie pokazuje mi się tekst do wpisania jaki znak ma być zliczony, lecz sam go wybiera.Jak wpiszę ten tekst to jest 'm'.I jeszcze pisze, że jest tam 0 znaków 'm'.


(Sawyer47) #2

operator>>(std::istream, std::string) wczytuje jedno słowo, resztę zostawia w strumieniu, więc operator>>(std::istream, char) wczytuje pierwszą następną literę. A liczenie możesz zrobić za pomocą nagłówka , będzie krócej.


(Fiołek) #3

Tak się dzieje, ponieważ operator >> z cin pobiera tekst do pierwszego białego znaku, w tym wypadku do " ". Reszta zostaje w buforze i przy następnym wywołaniu pobiera pierwszy znak który w buforze jest, czyli "m". Do wczytania dłuższego tekstu użyj string.getline.


(Moore96) #4

To znaczy jak go mam użyć?


(Fiołek) #5

(Moore96) #6

Lecz wciąż mi ie działa:(

**************

string napis;

  cout<<"Podaj tekst, w kt\242rym maj\245 by\206 zliczone znaki:";

  cin.getline(napis);

**************

Pokazuje się taki błąd:no matching function for call to `std::basic_istream >::getline(std::string&)'

-- Dodane N sty 25, 2009 6:18 pm --

Uff...już śmiga.Problem leżał w zadeklarowaniu zminnej 'napis' oraz w getline(napis,50).Wszystko już działa ale czy nie da się zrobić by napis był normalnie string a nie char?


(Sawyer47) #7

Nie wiem co rozumiesz pod pojęciem "normalnie", ale można użyć tego: http://www.cppreference.com/wiki/string/getline

Ogólnie polecam najpierw szukać tu: http://www.cppreference.com/wiki/ , a później pytać na forum, zaoszczędzi to czasu wszystkim