Program operujący na stringach C++

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;
}

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

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

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...

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

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ę)

0
cout << min.size();

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

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ę)

1

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

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ę)

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;

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