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

[c++] wypisanie wyrazu małymi lub dużymi literami z tablicy charów. (wskaźniki)

Ostatnio zmodyfikowano 2017-03-12 00:45
Autor Wiadomość
nowawieza
Temat założony przez niniejszego użytkownika
[c++] wypisanie wyrazu małymi lub dużymi literami z tablicy charów. (wskaźniki)
» 2017-03-11 23:48:29
Witam.
Mam zadanie zrobić tablicę charów, wpisać wyraz max 20 znaków, wyraz zamienić na małe lub duże litery (switch).
Przy wypisywaniu wyrazu mają zostać użyte wskaźniki.

Ze wskaźnikami dopiero zaczynam.

Kod pewnie jest dosyć brzydki ale chętnie się czegoś nauczę :)

Potrzebuję poprawić nieco ten kod żeby ładniej wyglądał, bo wiem, że piszę jak kura pazurem w c++ :DD


C/C++
#include <iostream>

#include <string>

#include <math.h>

#include <cstdlib>

#include <ctime>
#include <ctype.h>

using namespace std;




const int N = 20;


int main()

{
    char tab[ N ];
    char * p;
    p = tab;
    int zmienna;
    for( int i = 0; i < N; i++ )
    {
        tab[ i ] = 0;
       
    }
    cout << "Podaj string: " << endl;
    cin >> tab;
    for( int i = 0; i < N; i++ )
    {
        cout << tab[ i ];
       
    }
    cout << "Jak chcesz wypisac wyraz? " << endl;
    cout << "Wcisnij 1 zeby wypisac malymi literami " << endl;
    cout << "Wcisnij 2 zeby wypisac duzymi literami " << endl;
    cin >> zmienna;
   
    switch( zmienna )
    {
    case 1:
        for( int i = 0; i < N; i++ )
        {
           
            cout <<( char ) tolower( *( p + i ) );
        }
       
       
        break;
       
       
       
    case 2:
        for( int i = 0; i < N; i++ )
        {
           
            cout <<( char ) toupper( *( p + i ) );
        }
        break;
    }
   
   
    return 0;
}
P-158904
Bielan
» 2017-03-11 23:53:42
Ciężko oceniać styl pisania, bo ten zależy od preferencji. Przelatując na szybko okiem to zaproponować mogę usunięcie nadmiarowych znaków nowej linii i usunięcie globalnej zmiennej na rzecz lokalnej.
P-158905
maly7
» 2017-03-11 23:56:20
Chodzi ci o styl kodu? Ciężko coś zmienić, bo każdy pisze po swojemu, ma swój styl. Dla niektórych coś będzie wyglądało ładnie, dla innych będzie szpeciło kod. Usunąłbym tylko niepotrzebne odstępy między liniami.
Ja np. używając prostych instrukcji np. w warunkach lub pętlach nie używam klamer. Przykład:
C/C++
for( int i = 0; i < N; i++ )
     cout << tab[ i ];
//zamiast
for( int i = 0; i < N; i++ )
{
    cout << tab[ i ];
}
Ale dla niektórych wygląda to np. mniej przejrzyście i nie polecają tego :D

@Nie zauważyłem powyższej odpowiedzi, ale się z nią zgadzam :D
P-158907
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-11 23:58:51
No są 4 znaki nowej lini z tego co widzę. Ale jak je usunę to wszystko będzie źle wyglądało :D

A co z tą zmienną zrobić?
Chodzi o jakieś static int albo coś? W sumie nigdy się tym nie bawiłem albo używałem, a wcale nie wiedziałem, że używam :D

Postaram się dołożyć pętle do while na wypadek gdyby ktoś wpisał wyraz dłuższy niż 20 znaków i w switchu gdyby wybrał inną cyfre ;d
P-158908
maly7
» 2017-03-12 00:03:36
Teraz masz zmienną globalną, jeśli wstawisz to
const int N = 20;
 do main'a stanie się lokalną :D
No widzisz, dla ciebie bez tych odstępu wygląda źle, dla innych (np. dla mnie) wygląda lepiej bez tych odstępów. O gustach się nie dyskutuje i to ty wybierasz jak ma to wszystko wyglądać :D Mówiąc o niepotrzebnych (dla mnie) odstępach chodziło mi również o te pomiędzy #include, lub za klamrami otwierającymi '{' lub przed zamykającymi '}', albo przed i po 'break;'

Można natomiast się trzymać jakiś głównych standardów/założeń co do wyglądu.

I dodatkowo jeśli masz kilka zmiennych tego samego typu możesz je zapisać łącznie np.
char tab[ N ], * p = tab;
P-158909
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-12 00:08:06
Dzięki chłopaki :D Nie patrzyłem na to z tej strony, że każdy inaczej pisze ;p


A co powiecie o tych warunkach pętli i błędzie?

C/C++
#include <iostream>

#include <string>

#include <math.h>

#include <cstdlib>

#include <ctime>
#include <ctype.h>

using namespace std;




const int N = 20;


int main()

{
    char tab[ N ];
    char * p;
    p = tab;
    int zmienna;
    for( int i = 0; i < N; i++ )
    {
        tab[ i ] = 0;
       
    }
   
   
    cout << "Podaj string: " << endl;
    cin >> tab;
   
    for( int i = 0; i < N; i++ )
   
         cout << "Jak chcesz wypisac wyraz? " << endl;
   
    cout << "Wcisnij 1 zeby wypisac malymi literami " << endl;
    cout << "Wcisnij 2 zeby wypisac duzymi literami " << endl;
    cin >> zmienna;
   
    do {
       
        switch( zmienna )
        {
        case 1:
            for( int i = 0; i < N; i++ )
            {
               
                cout <<( char ) tolower( *( p + i ) );
            }
           
           
            break;
           
           
           
        case 2:
            for( int i = 0; i < N; i++ )
            {
               
                cout <<( char ) toupper( *( p + i ) );
            }
           
           
            break;
        }
    } while( zmienna = 1 || zmienna = 2 );
   
   
   
    return 0;
}

błąd:

C/C++
70 28 C:\U sers\filip\Desktop\xxx[ Error ] lvalue required as left operand of assignment


Z tego co na innym forum wyczytałem to "nie można zmienić wartości zmiennej tymczasowej". I nie wiem o co chodzi :/


Dodatkowo nie wiem jak dać zabezpieczenie przed wpisaniem większej ilości znaków niż 20.

P-158910
maly7
» 2017-03-12 00:12:07
} while( zmienna = 1 || zmienna = 2 );
Daj '==' zamiast '='

'=' to operator przypisania, a '==' porównania.

Poza tym powinno być tak:
} while( zmienna != 1 && zmienna != 2 );

Ponieważ określa to jak długo ma się wykonywać pętla do...while, czyli do czasu aż zmienna będzie różna od 1 i od 2

Z tego co na innym forum wyczytałem to "nie można zmienić wartości zmiennej tymczasowej". I nie wiem o co chodzi :/
O co dokładniej Ci chodzi, bo nie do końca zrozumiałem :D

@
Jeszcze zobaczyłem to:
C/C++
for( int i = 0; i < N; i++ )

     cout << "Jak chcesz wypisac wyraz? " << endl;

Zabrakło ci tu wyświetlania tablicy (cout << tab ?), teraz będzie ci wyświetlało 20 razy "Jak chcesz wypisac wyrac? "
P-158911
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-12 00:23:07
Haha dobra :D

Wyjaśniłeś mi już wszystko :)

Kurcze robię błędy, których nie powinienem robić, bo je znam. Na przykład to z operatorem przypisania, a porównania ;/


Co do tego for'a to chciałem usunąć to wyświetlanie wyrazu, a zapomniałem usunąć jeszcze for'a ;D Już usunięte :D

Zostało mi zabezpieczenie przed wpisaniem wyrazu dłuższego niż 20 znaków.
Jak to zrobić? Nie mam pomysłu :/

P-158912
« 1 » 2
  Strona 1 z 2 Następna strona