Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Program wypisujące wszystkie wyrazy, których pierwszy znak jest równy ostatniemu.

Ostatnio zmodyfikowano 2014-10-08 01:00
Autor Wiadomość
gienekmiecio
Temat założony przez niniejszego użytkownika
[C++] Program wypisujące wszystkie wyrazy, których pierwszy znak jest równy ostatniemu.
» 2014-09-30 22:27:53
Witam mam problem z dokładnością drugiej części pewnego zadania.
Zadanie:

Napisz program wprowadzający z klawiatury tekst i wypisujący go w następujący sposób:
1) wszystkie wyrazy wypisane w kolumnie
2) wszystkie wyrazy, których pierwszy znak jest równy ostatniemu, wypisane w kolumnie

PRZYKŁAD ROZWIĄZANIA:
Wpisany tekst>> "Ala ala, a ma kota."
Wypisany tekst w 1:
"Al
am
ak
ot
a." Program wypisuje wyrazy w kolumnie.
Wypisany tekst w 2:
"ala
a" Program wypisuje wyrazy których pierwszy znak jest równy ostatniemu, w kolumnie.

Pierwszy podpunkt rozwiązałem, drugi w połowie. Dlaczego drugi w połowie? Program dział pierw dobrze, ale nie wypisywał środka wyrazu. Zmodyfikowałem go jeszcze bardziej, i teraz powinno według mnie działać- ale program nie wypisuje wyrazów...
Jak to naprawić?

Napisałem program:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main() {
    cout << "Napisz krotkie zdanie:";
    string zdanie;
    int dlugosc = 0;
    getline( cin, zdanie );
    dlugosc = zdanie.length();
    cout << "1) Zdanie wypisane w kolumnie: " << endl;
    for( int i = 0; i <= dlugosc; i++ ) {
        if( zdanie[ i ] == ' ' ) {
            cout << "" << endl;
        }
        else {
            cout << zdanie[ i ];
        }
    }
    cout << endl << "2) Zdanie wypisane w kolumnie (tylko wyrazy spelniajace warunek): " << endl; // WARUNEK- wszystkie wyrazy, których pierwszy znak jest równy ostatniemu
    string lol = ""; //Dodaję dodatkową zmienną do liczenia i wypisywania wyrazów.
    int lol2;
    int b = 0, c = 0;
    char x, y;
    for( int i = 0; i < dlugosc; i++ ) {
        if( zdanie[ i ] == ' ' ) { //Warunek pomijający spacje w tekście
            cout << "" << endl;
            lol.erase(); //Czyszczenie zmiennej "lol", gdyż w momencie wystąpienia powyższej spacji kończy się poprzedni wyraz i zaczyna nowy. Dlatego czyszczę poprzedni wyraz.
        }
        else {
            c = c + 1; // Zlicza przejścia.
            lol = lol + lol[ b ] + zdanie[ i ]; //Dodaje kolejno literkę z tekstu do zmiennej "lol"
            lol2 = lol.length() - 1; // Sprawdza długość zmiennej "lol" odejmując NULL
            lol[ 0 ] = x; //Podstawia znak z zmiennej "lol" pod char dla "x"
            zdanie[ lol2 ] = y; //Podstawia znak z zmiennej "zdanie" pod char dla "y"
            if( x == y ) { //Warunek, który sprawdza czy pierwsza litera w zmiennej "lol" jest równa ostatniej litery
                b = 0; // Zeruje b jeśli warunek się spełnia, ponieważ wyraz zostanie wypisany- więc nalezy zacząć zliczać nowy wyraz, a zmienna "b" odpowiada numerowi w rzedzie dla "lol"- do którego jest dodawana literka z tekstu.
                cout << lol; }
            lol.erase(); //Czyści "lol" Ponieważ wyraz został wypisany.
            b = b + c + 1;
        }
    }
    return 0;
}
P-117813
pekfos
» 2014-10-01 18:25:18
C/C++
char x, y;
//..
lol[ 0 ] = x;
zdanie[ lol2 ] = y;
if( x == y ) {
Tylko tu używasz x i y. Te zmienne nie są nawet potrzebne, pomijając, że są użyte kompletnie bez sensu i błędnie.
P-117825
gienekmiecio
Temat założony przez niniejszego użytkownika
» 2014-10-01 19:17:56
Bez tych zmiennych sytuacja się i tak nie zmienia.
???

C/C++
string lol = "";
int lol2;
int b = 0, c = 0;
for( int i = 0; i < dlugosc; i++ ) {
    if( zdanie[ i ] == ' ' ) {
        cout << "" << endl;
        lol.erase();
    }
    else {
        c = c + 1;
        lol = lol + lol[ b ] + zdanie[ i ];
        lol2 = lol.length() - 1;
        if( lol[ lol2 ] == lol[ 0 ] ) {
            b = 0;
            cout << lol; }
        lol.erase();
        b = b + c + 1;
    }
}
P-117826
pekfos
» 2014-10-03 16:53:03
C/C++
if( lol[ lol2 ] == lol[ 0 ] ) {
    b = 0;
    cout << lol; }
lol.erase();
Na pewno erase() powinno być poza warunkiem..?
P-117871
gienekmiecio
Temat założony przez niniejszego użytkownika
» 2014-10-04 12:51:32
Po włączeniu tej linijki do if'a, nadal nie działa poprawnie :(
P-117916
libed
» 2014-10-05 20:41:30
Albo w opisie jest coś nie tak albo ja nie rozumiem znaczenia słowa "wyraz".

jakim cudem w tekście "Ala ala, a ma kota" wyrazami są:
- Al
- am
- ak
- ot
- a

?
P-118006
gienekmiecio
Temat założony przez niniejszego użytkownika
» 2014-10-07 19:22:29
Ma ktoś pomysł, bo ja już się poddaję?
P-118089
pekfos
» 2014-10-07 20:54:33
Podaj aktualny kod.

jakim cudem w tekście "Ala ala, a ma kota" wyrazami są:
- Al
- am
- ak
- ot
- a

?
To z pierwszego podpunktu, zdanie wypisane w kolumnie. Najwyraźniej 2 znaki na wiersz.
P-118103
« 1 » 2
  Strona 1 z 2 Następna strona