Program operujący na stringach C++

Odpowiedz Nowy wątek
2015-01-13 11:49

Rejestracja: 5 lat temu

Ostatnio: 7 miesięcy temu

0

Cześć,

z góry uprzedzam że jestem bardziej niż początkująca...
Mam do zrobienia zadanie.
Próbowałam sama ale nie wiem co źle robię, gdyż w trzeciej części zadania wyswietla mi albo najdłuzszy albo end.
Drugiej części jeszcze nie mam w ogóle.

Moze ktoś sie zlituje i pomoże ..

Treść:
Zadanie 3
Napisać program, który:
a. wczytuje ciąg napisów aż do napotkania napisu ”end” b. drukuje informację, ile razy wczytano po sobie dwa napisy kończące się tym samym znakiem (napisu "end" nie brać pod uwagę)
b. drukuje informację, ile razy wczytano po sobie dwa napisy kończące się tym samym znakiem (napisu "end" nie brać pod uwagę)
c. drukuje długość najkrótszego napisu (napisu "end" nie brać pod uwagę)
Uwaga: Zadanie rozwiązać bez użycia tablic.
Wskazówki

  1. Napisy należy wczytywać instrukcją cin (do pierwszego niewidocznego znaku)
  2. Napisy można porównywać ze sobą w całości, za pomocą operatora ==
  3. Jeśli napis jest zmienną typu string, to jego długość (liczba znaków) jest równa n= napis.size( ), zaś ostatni znak to napis[n-1].

A oto mój kod:

string napis;//deklaracja zmiennej ³añcuchowej
string napis_min;
int licz_min;
int n= napis.size();
int m=napis_min.size();

    cout<<"Podaj ciag znakow oddzielonych spacjami, tabularotarami i entrami."<<endl;
    cout<<"end konczy wczytywanie"<<endl;

    napis_min=napis;
    do {
        cin>>napis;

        if (n<m)           {
        napis_min=napis;
        licz_min=1;
        }
        else if (n==m)
        {
        licz_min++;
        }
        ;
    }
    while (napis!="end");

cout<<"Najkrotszy wyraz to:"<<"\t"<<napis<<endl;

return 0;
}

edytowany 1x, ostatnio: zuzannaruda, 2015-01-13 13:15

Pozostało 580 znaków

2015-01-13 12:00

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

string min;
for(string word;(cin>>word)&&(word!="end");)
  {
   if((!min.size())||(min.size()>word.size()) min=word;
  }
cout<<"Najkrotszy: "<<min<<endl;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Przy dobrym optymalizatorze min.size() ma szanse wywołać się raz, zaś przy użyciu min.empty() tracimy tą szansę. - _13th_Dragon 2015-01-13 15:39

Pozostało 580 znaków

2015-01-13 12:26

Rejestracja: 5 lat temu

Ostatnio: 7 miesięcy temu

0

Dzięki Dragon, ale to musi być pętla while albo do while

Pozostało 580 znaków

2015-01-13 12:37

Rejestracja: 9 lat temu

Ostatnio: 3 dni temu

0

a co to za problem zamienic for na while? Przeciez warunek masz taki sam, dekleracje zmiennej przesuwasz do pierwszej liniki w while i tyle...

Pozostało 580 znaków

2015-01-13 12:50

Rejestracja: 5 lat temu

Ostatnio: 7 miesięcy temu

0

No właśnie dla mnie problem..
Tak jak napisałam jestem bardziej niż początkująca, ale spróbuję sama
W każdym razie dzięki..
A co z drugim podpunktem,

może ktoś zechce pomóc, bo nie mam na to pomysłu

Pozostało 580 znaków

2015-01-13 12:53

Rejestracja: 5 lat temu

Ostatnio: 7 miesięcy temu

0

Dobra, został mi do zrobienia drugi podpunkt:
b. drukuje informację, ile razy wczytano po sobie dwa napisy kończące się tym samym znakiem (napisu "end" nie brać pod uwagę)

Pozostało 580 znaków

2015-01-13 13:00

Rejestracja: 9 lat temu

Ostatnio: 3 dni temu

0
cout << min.size();

zrozum co sie dzieje w kodzie od dragona to bedziesz wiedziec co masz zrobic.

Pozostało 580 znaków

2015-01-13 13:07

Rejestracja: 5 lat temu

Ostatnio: 7 miesięcy temu

0

No właśnie nie rozumiem, miałam nadzieję że ktoś tu z bardziej oświeconych mi rozjaśni.
Zwłaszcza zaskoczyło mnie że jako warunek (cin>>napis)&&(napis!="end")
podany jest tu operator cin

Uczę się od tygodnia...Więc trochę wyrozumiałości

Nie umiesciłam przepraszam tego drugiego podpunktu:
b. drukuje informację, ile razy wczytano po sobie dwa napisy kończące się tym samym znakiem (napisu "end" nie brać pod uwagę)

edytowany 2x, ostatnio: zuzannaruda, 2015-01-13 13:14

Pozostało 580 znaków

2015-01-13 13:12

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

1

(cin>>napis)&&(napis!="end") - (udało się wczytać napis) oraz (ten napis nie jest słowem end)


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-13 14:05

Rejestracja: 5 lat temu

Ostatnio: 7 miesięcy temu

0

A co z tym podpunktem?

b. drukuje informację, ile razy wczytano po sobie dwa napisy kończące się tym samym znakiem (napisu "end" nie brać pod uwagę)

Pozostało 580 znaków

2015-01-13 14:34

Rejestracja: 15 lat temu

Ostatnio: 3 minuty temu

0
char last=0,ch=0;
unsigned samecount=0;
for(string word;(cin>>word)&&(word!="end");last=ch) samecount+=(last==(ch=word.back()))
cout<<"Takie same: "<<samecount<<endl;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0