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

[C++]Małe i duże litery.

Ostatnio zmodyfikowano 2014-01-21 19:30
Autor Wiadomość
XerdanPL
Temat założony przez niniejszego użytkownika
[C++]Małe i duże litery.
» 2014-01-15 19:15:41
Witam, mógłby ktoś mi pomóc z programem sortującym pozycyjnie?
Muszę przerobić ten kod, aby uwzględniał duże litery, ale nie wiem jak się za to zabrać.
-----
C/C++
for( char znak = 'a'; znak <= 'z'; znak++ )
{
    for( int i = 0; i < n; i++ )
    {
        if(( strlen( temp[ i ] ) > 0 ) &&( temp[ i ][ k - 1 ] == znak ) )
        {
            for( int l = 0; l <= m; l++ ) tab[ a ][ l ] = temp[ i ][ l ];
           
            temp[ i ][ 0 ] = '\0';
            a++;
-----

Całość :
C/C++
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int m, n, a, k;
    cout << "Podaj max. dl. ciagu znakow: ";
    cin >> m;
    cout << "Podaj ile wyrazow bedzie wprowadzone: ";
    cin >> n;
    char tab[ n ][ m + 1 ], temp[ n ][ m + 1 ];
    for( int i = 0; i < n; i++ )
    {
        cout << "Podaj " << i + 1 << " wyraz: ";
        cin >> tab[ i ];
        temp[ i ][ 0 ] = '\0';
    }
   
    cout << "\nElementy tablicy przed sortowaniem:\n";
    for( int i = 0; i < n; i++ ) cout << tab[ i ] << "\n";
   
    a = n;
   
    for( int k = m; k > 0; k-- )
    {
        int j = 0;
        for( int i = 0; i < n; i++ )
        {
            if( strlen( tab[ i ] ) >= k )
            {
                for( int l = 0; l <= m; l++ ) temp[ j ][ l ] = tab[ i ][ l ];
               
                tab[ i ][ 0 ] = '\0';
                a--;
                j++;
            }
        }
       
        for( int i = 0; i < n - 1; i++ )
        {
            if(( strlen( tab[ i ] ) == 0 ) &&( a > 0 ) )
            {
                bool b = false;
                for( j = i + 1;( j < n ) &&( b == false ); j++ )
                {
                    if( strlen( tab[ j ] ) > 0 )
                    {
                        for( int l = 0; l <= m; l++ ) tab[ i ][ l ] = tab[ j ][ l ];
                       
                        tab[ j ][ 0 ] = '\0';
                        b = true;
                    }
                }
            }
        }
       
        for( char znak = 'a'; znak <= 'z'; znak++ )
        {
            for( int i = 0; i < n; i++ )
            {
                if(( strlen( temp[ i ] ) > 0 ) &&( temp[ i ][ k - 1 ] == znak ) )
                {
                    for( int l = 0; l <= m; l++ ) tab[ a ][ l ] = temp[ i ][ l ];
                   
                    temp[ i ][ 0 ] = '\0';
                    a++;
                }
            }
        }
    }
   
    cout << "\nElementy tablicy po sortowaniu:\n";
    for( int i = 0; i < n; i++ ) cout << tab[ i ] << "\n";
   
    return 0;
}
P-102257
XerdanPL
Temat założony przez niniejszego użytkownika
» 2014-01-15 22:00:46
Ref
P-102280
leon_w
» 2014-01-15 22:06:52
aby uwzględniał duże litery
Czy raczej żeby duże litery traktował tak samo jak małe?
Jeśli tak, to raczej byś musiał zamienić wszystkie np. na małe i wtedy sortować.
P-102282
XerdanPL
Temat założony przez niniejszego użytkownika
» 2014-01-15 22:23:18
Tak chodzi o to, aby duże litery traktował tak samo jak małe.
P-102283
leon_w
» 2014-01-15 22:43:45
Masz tu przykład, jak możesz porównać litery za pomocą funkcji bez zmiany ich wielkości w oryginalnej zmiennej:
C/C++
#include <iostream>
#include <string>


using namespace std;

char zamien( char litera );

int main()
{
    char x[ 5 ] = { 'A', 'a', 'B', 'b', 'c' };
   
    for( int i = 0; i < 4; i++ )
    {
        if( zamien( x[ i ] ) > zamien( x[ i + 1 ] ) )
             cout << x[ i ] << " jest po " << x[ i + 1 ] << endl;
       
        else if( zamien( x[ i ] ) < zamien( x[ i + 1 ] ) )
             cout << x[ i ] << " jest przed " << x[ i + 1 ] << endl;
       
        else if( zamien( x[ i ] ) == zamien( x[ i + 1 ] ) )
             cout << x[ i ] << " jest rowne " << x[ i + 1 ] << endl;
       
    }
   
   
   
   
}



char zamien( char litera )
{
    litera = tolower( litera );
   
    return litera;
}
 
P-102284
XerdanPL
Temat założony przez niniejszego użytkownika
» 2014-01-16 19:06:57
Próbowałem to jakoś wbić w mój kod - nie wychodzi.
P-102322
sikora91
» 2014-01-16 22:36:50
Nie lepiej jest dołączyć biblioteke <string.h> zamiast bawić się z tablicą char-ów. Dzięki temu będziesz mógł je porównywać poprzez funkcję strcmp bo jak narazie to kod jest mało czytelny przez tą ilość for-ów. I taka drobna uwaga żeby nadawać zmiennym nazwy zgodnie z ich przeznaczeniem gdyż ciężko się połapać do czego służą zmienne "int m, n, a, k;" wtedy lepiej jest przeczytać kod i go zrozumieć.
P-102340
alixir
» 2014-01-17 08:00:48
W ostaniej pętli porównuj litery używając funkcji 'tolower'

if(( strlen( temp[ i ] ) > 0 ) &&( static_cast < char >( tolower( temp[ i ][ k - 1 ] ) ) == znak ) )
P-102347
« 1 » 2
  Strona 1 z 2 Następna strona