Program operujący na stringach C++

Odpowiedz Nowy wątek
2015-01-13 11:49
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
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
0

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

Pozostało 580 znaków

2015-01-13 12:37
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
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
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
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
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
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
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
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
Liczba odpowiedzi na stronę

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