szawel Temat założony przez niniejszego użytkownika |
[C]Łańcuchy znaków » 2015-12-21 15:30:40 Mam takie zadanie. . #include <stdio.h> #include <string.h> #include <cstdlib>
int czy_liczba_calkowita( char arg[] ) { char * ptr; strtol( arg, & ptr, 10 ); return !* ptr; } int jaka_liczba( char arg[] ) { return czy_liczba_calkowita( arg ) ? strtol( arg, NULL, 10 ) : 0; }
int main() { char txt[ 100 ]; gets( txt ); int a = jaka_liczba( char txt[ 100 ] ); printf( "%s", a ); system( "pause" ); } Napisałem taki kod, ale wiem, że jest zły. Nie wiem jak go poprawić, jestem początkującym. Prosze o pomoc. |
|
mateczek |
w c++ » 2015-12-21 15:41:08 #include<iostream> #include<string> #include<sstream> using namespace std;
int main() { int i; cin >> i; string s; cin >> s; i = stoi( s ); stringstream ss; ss << s; ss >> i; }
|
|
szawel Temat założony przez niniejszego użytkownika |
» 2015-12-21 16:00:35 Przepraszam, ale troche nie za bardzo rozumiem jak to się odnosi do tego zadania. Treść mówi, że mają być użyte funkcje, które raczej są napisane dobrze. Nie wiem jednak jak je dobrze wywołać. |
|
carlosmay |
» 2015-12-21 16:07:21 int a = jaka_liczba( char txt[ 100 ] ); niepoprawne argumenty w wywołaniu funkcji. int a = jaka_liczba( txt, 100 );
int jaka_liczba( char arg[], int rozmiar ) { }
|
|
mateczek |
» 2015-12-21 16:08:11 masz 3 sposoby na wczytanie liczby z klawiatury: sposób 1 bezpośrednio: int main() { int i; cin >> i; i = i * 2; }
Sposób 2 To najpierw wczytujesz napis i można to zrobić tak int main() { string s; cin >> s; int i = stoi( s ); i = i * 2;
lub tak najpierw napis ze strumienia klawiatury wrzucić do tymczasowego strumienia i wyjąć liczbę (dwa razy niepotrzebna robota) int main() { string s; cin >> s; stringstream ss; ss << s; ss >> i; i = i * 2;
|
|
szawel Temat założony przez niniejszego użytkownika |
» 2015-12-21 16:17:39 Poprawiłem to w ten sposób. #include <stdio.h> #include <string.h> #include <cstdlib>
int czy_liczba_calkowita( char arg[] ) { char * ptr; strtol( arg, & ptr, 10 ); return !* ptr; } int jaka_liczba( char arg[], int rozmiar ) { return czy_liczba_calkowita( arg ) ? strtol( arg, NULL, 10 ) : 0; }
int main() { char txt[ 100 ]; gets( txt ); int a = jaka_liczba( txt, 100 ); printf( "%s", a ); system( "pause" ); } Prawidlowo wyswietla zero, ale nie wyswietla liczb tak jak powinno. |
|
carlosmay |
» 2015-12-21 16:25:47 Z tym rozmiarem trochę poleciałem. Dla łańcucha 'char' jest zbędny jeśli nie iterujesz po całej tablicy. Poza tym strtol() w przypadku liczby na początku łańcucha i znakami innymi dalej lub pomiędzy skonwertuje liczbę z początku, a resztę pozostawi. |
|
Kaikso |
» 2015-12-21 16:33:05 Od kiedy to C jest obiektowe miało być w C a nie C++. #include <stdio.h>
#define czy_cyfra( c ) (( c ) > '0' && ( c ) < '9' ) #define jaka_cyfra( c ) (( c ) - '0' )
int czy_liczba_calkowita( char * str ) { if( * str == '\0' ) return - 1; do { if( !czy_cyfra( * str ) ) return - 1; } while( *++str != '\0' ); return 0; }
unsigned jaka_liczba( char * str ) { unsigned liczba = 0; do { liczba = liczba * 10 + jaka_cyfra( * str++ ); } while( * str != '\0' ); return liczba; }
int main() { char str[ 255 ]; scanf( "%s", str ); printf( "%u", czy_liczba_calkowita( str ) == 0 ? jaka_liczba( str ) : 0 ); return 0; }
|
|
« 1 » |