[C++]Małe i duże litery.
Ostatnio zmodyfikowano 2014-01-21 19:30
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ć. ----- 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ść : #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; } |
|
XerdanPL Temat założony przez niniejszego użytkownika |
» 2014-01-15 22:00:46 Ref |
|
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ć. |
|
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. |
|
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: #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; }
|
|
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. |
|
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ć. |
|
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 ) ) |
|
« 1 » 2 |