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ść
karambaHZP
» 2017-03-05 02:15:33
C/C++
int ilemalych( const std::string[] tab, std::size_t size )
{
    int licznik = 0;
    for( std::size_t i { }; i < size(); i++ ) { // przechodzi do kolejnych wyrazów
        for( std::size_t j { }; j < tab[ i ].size(); ++j ) { // tutaj przechodzisz dany wyraz litera po literze
            if( islower( tab[ i ][ j ] ) ) // sprawdzenie czy dana litera jest małą
            {
                licznik++;
            }
        }
    }
    return licznik;
}

std::string::size()
std::size_t

down: Przyznam, że umknął mi opis zadanie i zasugerowałem się poczynaniami autora.
P-158563
maly7
» 2017-03-05 02:17:44
C/C++
int ilemalych( string napis )
{
    int licznik = 0;
    for( int i = 0; i < napis.length(); i++ ) { // tutaj przechodzisz dany wyraz litera po literze
        if( islower( napis[ i ] ) ) // sprawdzenie czy dana litera jest małą
             licznik++;
       
    }
    return licznik;
}

W tym programie ta funkcja powinna sprawdzać ile małych liter ma każdy wyraz z osobna, a nie ile małych mają razem. Z resztą w poleceniu masz podane jak ma wyglądać ta funkcja.
Tablicę napisów masz przekazać dopiero do funkcji sortującej te napisy.
P-158564
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-05 02:18:40
kod programu po zmianach:
C/C++
#include <iostream>
#include <string>
#include <math.h>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
using namespace std;





int ilemalych( const string[] tab, size_t size )
{
    int licznik = 0;
    for( size_t i { }; i < size(); i++ ) { // przechodzi do kolejnych wyrazów
        for( size_t j { }; j < tab[ i ].size(); ++j ) { // tutaj przechodzisz dany wyraz litera po literze
            if( islower( tab[ i ][ j ] ) ) // sprawdzenie czy dana litera jest małą
            {
                licznik++;
            }
        }
    }
    return licznik;
}

int main()
{
   
    int ilosc;
    string tab[ 9 ];
   
    do {
       
        cout << "Podaj ilosc napisow : \n ";
        cin >> ilosc;
    } while( ilosc > 10 && ilosc < 0 );
   
   
    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( tab );
   
    cout << "Po  sortowaniu : \n ";
   
   
    for( int i = 0; i < ilosc; i++ )
         cout << tab[ i ] << " ";
   
    cout << endl;
   
   
}






log błędów:

C/C++
13 32 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Error ] expected ',' or '...' before 'tab'
C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp In function 'int ilemalych(const string*)':
16 19 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Warning ] extended initializer lists only available with - std = c++ 11 or - std = gnu++ 11
16 21 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Warning ] extended initializer lists only available with - std = c++ 11 or - std = gnu++ 11
16 33 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Error ] 'size' was not declared in this scope
17 23 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Warning ] extended initializer lists only available with - std = c++ 11 or - std = gnu++ 11
17 25 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Warning ] extended initializer lists only available with - std = c++ 11 or - std = gnu++ 11
17 32 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Error ] 'tab' was not declared in this scope
P-158565
karambaHZP
» 2017-03-05 02:22:11
włącz C++11 (lub wyżej) w swoim kompilatorze (compiler settings)
P-158566
maly7
» 2017-03-05 02:26:55
Jeśli używasz tej funkcji jaką podał karambaHZP to zamień:
int ilemalych( const std::string[] tab, std::size_t size )

na
int ilemalych( const std::string tab[], std::size_t size )

I zobacz mój wcześniejszy post, nie tak ma działać ta funkcja w tym zadaniu.
P-158567
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-05 02:35:38
Już się pogubiłem który kod mam wstawić ale wstawiam jeden z powyższych :D

No i udało mi się dodać ten c++11 :)

Poprawiłem nagłówek funkcji.

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






int ilemalych( const string napis, size_t size ) // Na pewno dobrze? Nie powinien byc 1 argument tylko?
{
    int licznik = 0;
    for( std::size_t i { }; i < napis.size(); i++ ) { // tutaj przechodzisz dany wyraz litera po literze
        if( islower( tab[ i ] ) ) // sprawdzenie czy dana litera jest małą
             licznik++;
       
    }
    return licznik;
}
int main()
{
   
    int ilosc;
    string tab[ 9 ];
   
    do {
       
        cout << "Podaj ilosc napisow : \n ";
        cin >> ilosc;
    } while( ilosc > 10 && ilosc < 0 );
   
   
    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( tab );
   
    cout << "Po  sortowaniu : \n ";
   
   
    for( int i = 0; i < ilosc; i++ )
         cout << tab[ i ] << " ";
   
    cout << endl;
   
   
}


log błędów:

C/C++
C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp In function 'int ilemalych(std::string, size_t)':
18 22 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Error ] 'tab' was not declared in this scope

C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp In function 'int main()':
52 16 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 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-158568
maly7
» 2017-03-05 02:38:28
Znowu powróciłeś do punktu wyjścia:
int ilemalych( const string napis, size_t size )

Jeśli przekazujesz sam napis, to wystarczy tylko jeden argument.
Zmieniłeś nazwę z tab na napis, więc w środku funkcji też zmień tab na napis.
Zmieniłeś to, że teraz funkcja przyjmuje napis a nie tablicę napisów, a w mainie przekazujesz do niej tablicę.
Musisz się zastanowić, którą wersję w końcu przyjmujesz, bo faktycznie widać, że się pogubiłeś :P

I napiszę to jeszcze raz, ta funkcja podana w poleceniu jest poprawna, nie trzeba nic w niej zmieniać i będzie działać jak należy (no chyba, że prowadzący każe).
P-158569
karambaHZP
» 2017-03-05 02:42:19
Napisałem to jak tylko można najprościej.
Sortowanie jest z <algorithm> więc musisz sam sobie radzić z pisaniem sortowania :P
C/C++
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>

std::size_t ileMalychLiter( const std::string & slowo )
{
    std::size_t licznik { };
    for( std::size_t i { }; i < slowo.size(); ++i ) {
        if( std::tolower( slowo[ i ] ) == slowo[ i ] ) {
            ++licznik;
        }
    }
    return licznik;
}

void sortuj( std::string tab[], std::size_t size ) {
    std::sort( tab, tab + size,
    []( const auto & lhs, const auto & rhs ) { return rhs < lhs; } );
}

int main()
{
    constexpr std::size_t rozmiar { 9 };
    std::string tab[ rozmiar ];
    std::size_t ile_wyrazow;
    std::cin >> ile_wyrazow;
   
    if( ile_wyrazow <= rozmiar ) {
        for( std::size_t i { }; i < ile_wyrazow; ++i ) {
            std::cin >> tab[ i ];
        }
    }
   
    sortuj( tab, ile_wyrazow );
   
    for( std::size_t i { }; i < ile_wyrazow; ++i ) {
        std::cout << tab[ i ] << " ma " << ileMalychLiter( tab[ i ] ) << " malych liter\n";
    }
}
P-158570
1 2 3 « 4 » 5 6
Poprzednia strona Strona 4 z 6 Następna strona