Skocz do zawartości

[C++] zliczanie literek


Gerald

Polecane posty

Mam taki problem:

 

Napisać program by mógł być możliwy następujący dialog z użytkownikiem:

- "Podaj długość twojego tekstu"

- użytkownik wpisuje np. 30

- "Wpisz tekst"

- użytkownik wpisuje tekst i naciska Enter

-"Podaj literkę którą mam zliczyć"

- użytkownik wpisuje np. k

- program liczy literki k i wyrzuca na ekran komunikat: "w twoim tekście było 8 literek k"

 

ja mam coś takiego:

 

#include <cstdlib>

#include <iostream>

#include <string>

#include<iomanip>

using namespace std;

const int nmax=30;

class tekst

{

char t[nmax];

public:

void czytaj_tekst();

int zlicz_znak(char);

};

void tekst::czytaj_tekst()

{

cout << "Wpisz jakies slowo ";

cin >> setw(sizeof(t))>> t; //Modyfikator setw() (set width = ustaw szerokość)

}

int tekst::zlicz_znak(char z)

{

int i = 0, licz = 0;

while (t != ' ')

{

if (t == z)

licz++;

i++;

}

return licz;

}

int main(int argc, char *argv[])

{

tekst moj_txt;

moj_txt.czytaj_tekst();

cout << "W tym slowie bylo ";

cout << moj_txt.zlicz_znak('a');

cout << " liter a \n";

system("PAUSE");

return EXIT_SUCCESS;

}

 

 

problem polega na tym, że mój program zlicza literki w następujący sposób:

 

po wpisaniu słowa zlicza mi literki np:a. Ale jeśli napisze zdanie, to mi zliczy tylko w pierwszym słowie a nie w całym zdaniu.

do tego ma tu jeszcze być że użytkownik ma podać jakąkolwiek literkę i program ma mu zliczyć. Proszę o pomoc, co gdzie mam poprawić.

Z góry dziękuję za wskazówki

Link do komentarza
Udostępnij na innych stronach

Nie wczytywałem się w kod (zbyt C++'owy) ale pewnie chodzi o to, że "cin >>" czyta tylko "do spacji". Wczytuj za pomocą "cin.getline(tablica_znakowa, maksymalna_dlugosc_ciagu);".

 

-Edit-

A no a pętla jest też walnięta no bo masz "while (t != ' ')" czyli licz do spacji. Jak już wczytasz getlinem to zrób tak (oczywiście pozmieniaj nazwy zmiennych):

for (int i = 0; tablica_znakow[i] != ''; i++)
 if (tablica_znakow[i] == szukany_znak) licznik++;
return licznik;

 

-Edit2-

W tej pętli warunkiem wyjścia ma być: tablica_znakow != '\ 0'; (bez spacji).

Link do komentarza
Udostępnij na innych stronach

  • 3 weeks later...

Program już działa i wygląda tak:

 

#include <string>

#include <iostream>

#include <conio.h>

using namespace std;

int ZliczZnaki(string Tekst, char z )

{

int uIlosc = 0 ;

for ( int i = 0 ; i <= Tekst.length() - 1 ; ++i)

{

if (Tekst == z)

++uIlosc;

}

return uIlosc;

}

int main(int argc, char *argv[])

{

string Tekst;

cout << "Podaj tekst, w ktorym maja byc zliczane znaki: " ;

getline(cin,Tekst);

 

char SzukanyZnak;

cout << "Podaj znak, ktory bedzie liczony: " ;

cin >> SzukanyZnak;

 

cout << "Znak '" << SzukanyZnak << "' wystepuje w tekscie "

<< ZliczZnaki(Tekst, SzukanyZnak) << " raz(y)."

<< endl;

 

system("PAUSE");

return EXIT_SUCCESS;

}

 

mam prośbę czy ktoś wie gdzie mogę znaleźć dobry poradnik i przewodnik po c++??? chodzi mi oto żebym zrozumiał co w danej linijce mojego programu zachodzi. komendy char, int, void, itp....

Chę wiedzieć co one oznaczają. A sam raczkuję więc kolega mi pomógł w napisaniu i poprawieniu programu. On wie jak to działa ale ja chcę sam dojść do tego jak to działa.

Link do komentarza
Udostępnij na innych stronach

Niestety, na tym forum nie zajmujemy się podstawami.

 

Takie posty wnikają z nieumiejętność uczenia się, albo z lenistwa (zakładający temat nie chce się więcej nauczyć/przeczytać niż jest to wymagane, więc liczy na to, że ktoś zredaguje dla niego potrzebny tekst...). Jeśli to pierwsze to jest dla Ciebie nadzieja, jeśli to drugie to nie licz na pomoc.

 

Wszystkie linijki zrozumiesz czytając niemalże dowolny podręcznik. Jak wolisz internetowe to poszukaj na google C++ Bez Cholesterolu.

Link do komentarza
Udostępnij na innych stronach

A sam raczkuję więc kolega mi pomógł w napisaniu i poprawieniu programu. On wie jak to działa ale ja chcę sam dojść do tego jak to działa.

 

A jaka jest różnica, między tym, że my Ci powiemy, a między tym, że kolega Ci powie?

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Gość
Temat jest zablokowany i nie można w nim pisać.
×
×
  • Utwórz nowe...