student95 Temat założony przez niniejszego użytkownika |
standardowe funkcje atoi, atof itp. » 2016-01-14 18:34:17 Witam, wiem że z pewnością ten temat trafi bezużytecznych, ale może ktoś się zlituje. Chodzi o to że potrzebny mi kod funkcji standardowych do konwersji (atoi(), itoa(), ftoa(), atof()) języka C. Jeżeli ktoś może podać jakąś stronę lub podręcznik/książkę w którym są one napisane. Oczywiście mógłbym napisać funkcje sam, ale na pewno nie przypominały by one funkcji standardowych, a profesor zapewne będzie się czepiał każdego średnika. Proszę o pomoc. Z góry dziękuje za odpowiedź. |
|
mateczek |
» 2016-01-14 18:46:20 musisz pobrać źródła biblioteki standardowej!!! https://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny#string.h |
|
pekfos |
» 2016-01-14 18:53:40 potrzebny mi kod funkcji standardowych do konwersji |
Pobierz kod źródłowy GCC, tam najprędzej to znajdziesz. |
|
mateczek |
» 2016-01-14 19:17:00 https://www.gnu.org/software/libc/
w libc są te funkcje bodajże |
|
student95 Temat założony przez niniejszego użytkownika |
» 2016-01-14 20:08:37 Dzięki za pomoc. Znalazłem funkcje atoi(), atof(), itoa(), niestety nie mogę znaleźć ftoa(). Czy to jest funkcja standardowa, bo nawet jej nie ma w spisie na Wikipedii. |
|
carlosmay |
» 2016-01-14 20:16:46 |
|
Elaine |
» 2016-01-15 07:56:26 potrzebny mi kod funkcji standardowych do konwersji | Pobierz kod źródłowy GCC, tam najprędzej to znajdziesz. |
Tam tego prawdopodobnie wcale nie znajdziesz, kompilator i biblioteka standardowa C w większości przypadków są ze sobą niepowiązane. |
|
student95 Temat założony przez niniejszego użytkownika |
» 2016-01-19 17:20:01 Funkcje znalazłem w książce ANSI C double atof( char s[] ) { double val, power; int i, sign; for( i = 0; s[ i ] == ' ' || s[ i ] == '\t'; i++ ) ; sign =( s[ i ] == '-' ) ?- 1 : 1; if( s[ i ] == '+' || s[ i ] == '-' ) i++; for( val = 0.0; s[ i ] >= '0' && s[ i ] <= '9'; i++ ) val = 10.0 * val +( s[ i ] - '0' ); if( s[ i ] == '.' ) i++; for( power = 1.0; s[ i ] >= '0' && s[ i ] <= '9'; i++ ) { val = 10.0 * val +( s[ i ] - '0' ); power *= 10.0; } return sign * val / power; }
int atoi( char s[] ) { int i, n, sign; for( i = 0; s[ i ] == ' ' || s[ i ] == '\t'; i++ ) ; sign =( s[ i ] == '-' ) ?- 1 : 1; if( s[ i ] == '+' || s[ i ] == '-' ) i++; for( n = 0; s[ i ] >= '0' && s[ i ] <= '9'; i++ ) n = 10 * n +( s[ i ] - '0' ); return sign * n; }
void itoa( int n, char s[] ) { int i, sign; if(( sign = n ) < 0 ) n = - n; i = 0; do { s[ i++ ] = n % 10 + '0'; } while(( n /= 10 ) > 0 ); if( sign < 0 ) s[ i++ ] = '-'; s[ i ] = '\0'; reverse( s ); }
Tylko nie mogłem znaleźć ftoa, więc napisałem takie coś, musiałem dodać dodać zmienną która określa liczbę pozycji po przecinku. #include <math.h> void ftoa( float n, char s[], int afterpoint ) { int i, sign, c, p; if(( sign = n ) < 0 ) n = - n; c = n; n = n - c; p = n * pow( 10, afterpoint ); i = 0; do { s[ i++ ] = p % 10 + '0'; } while(( p /= 10 ) > 0 ); s[ i++ ] = '.'; do { s[ i++ ] = c % 10 + '0'; } while(( c /= 10 ) > 0 ); if( sign < 0 ) s[ i++ ] = '-'; s[ i ] = '\0'; reverse( s ); }
Istnieje może jakiś inny sposób na wyznaczenie ile wpisano pozycji po przecinku, tak żeby nie trzeba było podawać jako parametr funkcji? |
|
« 1 » |