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

[C++] Sortowanie napisów ze względu na ilość małych liter (błąd)

Ostatnio zmodyfikowano 2017-03-05 10:10
Autor Wiadomość
nowawieza
Temat założony przez niniejszego użytkownika
[C++] Sortowanie napisów ze względu na ilość małych liter (błąd)
» 2017-03-05 01:05:56
Witam,
mam problem z użyciem funkcji w moim programie. Chyba nie potrafię się obchodzić z tablicami posiadającymi napisy.
Pomoże ktoś?

Nie wiem jak wywołać poprawnie funkcję w programie. Chcę żeby użyte były napisy z tablicy więc wpisuję w nawias "tab". Jednak wtedy wyskakuje błąd o konwertowaniu stringa na string (?)

Ta funkcja powinna obliczać ilość małych liter w napisie.

Kolejnej funkcji, która sortuje napisy ze względu na ilość malych liter też będzie dla mnie problemem ale nad tym będę myślał jak przebrnę przez to :)



C/C++
#include <iostream>
#include <string>
#include <math.h>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
using namespace std;





int ilemalych( string tab )
{
   
    int licznik = 0;
    for( int i = 0; i < tab.length(); i++ )
    if( islower( tab[ i ] ) )
    {
        licznik++;
       
    }
   
    return licznik;
}

int main()
{
   
    int ilosc;
   
    do {
       
        cout << "Podaj ilosc napisow : \n ";
        cin >> ilosc;
    } while( ilosc > 10 && ilosc < 0 );
   
    string tab[ ilosc ];
   
    for( int i = 0; i < ilosc; i++ ) {
       
       
        cout << "Podaj  napis : \n ";
        cin >> tab[ i ];
       
       
    }
    cout << "Przed  sortowaniem : \n ";
    for( int i = 0; i < ilosc; i++ )
         cout << tab[ i ] << " ";
   
    cout << endl;
   
   
    ilemalych( string tab );
    cout << "Po  sortowaniu : \n ";
   
   
    for( int i = 0; i < ilosc; i++ )
         cout << tab[ i ] << " ";
   
    cout << endl;
   
   
}


P-158538
karambaHZP
» 2017-03-05 01:16:23
Wstawiaj kompletny log kompilacji.

C/C++
string tab[ ilosc ];
http://stackoverflow.com​/questions/14075194​/variable-length-arrays-vla-in-c-and-c jest niezgodne ze standardem C++.
Rozmiar tablicy musi być
constexpr
, chyba że użyjesz dynamicznej tablicy (np. std::vector<>.

ilemalych( string tab );
To nie jest prawidłowe wywołanie funkcji. Po co tam ten
std::string
?

» Kurs C++ » Poziom 2Przekazywanie tablic jednowymiarowych do funkcji lekcja
P-158539
maly7
» 2017-03-05 01:21:28
Główne błędy:
-Rozmiar tablicy statycznej nie może być zmienną!
-W funkcji ilemalych pętla for nie ma klamer
-Przy wywołaniu funkcji nie podajemy typu zmiennej:
ilemalych( tab )
 zamiast
ilemalych( string tab )
-Jako argument funkcji ilemalych przyjmujesz string, a przy wywolaniu wsadzasz tam tablice
-Tablica nie ma metody length() tzn. nie sprawdzisz tak ile tablica ma elementów
P-158540
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-05 01:22:17
Dla tego kodu wyświetla się:

C/C++
C:\U sers\filip\xxxxxxx.cpp In function 'int main()':
54 20 C:\U sers\filip\xxxxxxx zad 2.cpp[ Error ] expected primary - expression before 'tab'

Wpisałem w nawias (string tab), bo tak mi się wyświetliło no i też dlatego, że samo tab nie działa, bo wyskakuje:

C/C++
54 16 C:\U sers\filip\xxxxxxx zad 2.cpp[ Error ] could not convert '(std::string*)(& tab)' from 'std::string* {aka std::basic_string<char>*}' to 'std::string {aka std::basic_string<char>}'

P-158541
maly7
» 2017-03-05 01:27:39
Wyświetlało się string dlatego, że powinieneś wsadzić tam zmienną typu string.
could not convert '(std::string*)(& tab)' from 'std::string* {aka std::basic_string<char>*}' to 'std::string {aka std::basic_string<char>}'
Oznacza głównie to, że powinieneś jako argument użyć string, a używasz tablice stringów.

Popraw na razie te błędy, wtedy powiedz co jeszcze nie działa. Żeby od razu za dużo nie namieszać.
P-158543
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-05 01:29:25
O to widzę, że dużo błędów robię.

Zacznijmy od pierwszego.

Zawsze w sumie w C robiłem tablicę w taki sposób

C/C++
int tab[]
printf( "Podaj xxx" )
scanf( "%d", & tab[ i ]

printf( "%d", tab[ i ]

A teraz z tego co rozumiem mówisz, że w C++ nie można robić takich rzeczy: tab[zmienna]

Jest to mój drugi program w C++ dopiero. Do tej pory uczyłem się w C ale i tak wiele nie potrafię :D

Jak powininem to zrobić w moim kodzie?
P-158544
karambaHZP
» 2017-03-05 01:32:44
-Rozmiar tablicy statycznej nie może być zmienną!
Nie prawda. Stała to też zmienna, tylko że ma niezmienną wartość.

C/C++
constexpr std::size_t zmienna { 5 };
std::string tab[ zmienna ];
To jest poprawne;

edit:
C/C++
int ilemalych( const std::vector < string >& tab )
{
    int licznik = 0;
    for( std::size_t i { }; i < tab.size(); i++ ) {
        for( std::size_t j { }; j < tab[ i ].size(); ++j ) {
            if( islower( tab[ i ][ j ] ) )
            {
                licznik++;
            }
        }
    }
    return licznik;
}

int main()
{
    std::size_t ilosc;
    do {
        cout << "Podaj ilosc napisow : \n ";
        cin >> ilosc;
    } while( ilosc > 10u && ilosc < 0u );
   
    std::vector < string > tab( ilosc );
    for( std::size_t i { }; i < tab.size(); i++ ) {
        cout << "Podaj  napis : \n ";
        cin >> tab[ i ];
    }
    //...
    ilemalych( tab );
}

P-158545
maly7
» 2017-03-05 01:35:22
W C również nie można było tak robić, nigdy rozmiaru tablicy statycznej nie można określać zmienną. Przy definiowaniu tablicy statycznej zawsze rozmiar musi być znany już w momencie kompilacji.
Jeśli tworzysz tablice podczas działania programu, musi być ona tablicą dynamiczną (poczytaj jakiś poradnik), lub możesz użyć np. biblioteki STL (np. vector).

@edit
karambaHZP, no tak, o to mi głównie chodziło tylko napisałem tak w uproszczeniu (mój błąd) :D
P-158546
« 1 » 2 3 4 5 6
  Strona 1 z 6 Następna strona