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 :) #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; }
|
|
karambaHZP |
» 2017-03-05 01:16:23 |
|
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 |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 01:22:17 Dla tego kodu wyświetla się: 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: 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>}'
|
|
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ć. |
|
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 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? |
|
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ść. constexpr std::size_t zmienna { 5 }; std::string tab[ zmienna ]; To jest poprawne; edit: 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 ); } |
|
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 |
|
« 1 » 2 3 4 5 6 |