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

standardowe funkcje atoi, atof itp.

Ostatnio zmodyfikowano 2016-01-19 17:20
Autor Wiadomość
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ź. 
P-143496
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
P-143499
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.
P-143500
mateczek
» 2016-01-14 19:17:00
https://www.gnu.org/software/libc/

w libc są te funkcje bodajże
P-143501
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.
P-143508
carlosmay
» 2016-01-14 20:16:46
P-143510
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.
P-143533
student95
Temat założony przez niniejszego użytkownika
» 2016-01-19 17:20:01
Funkcje znalazłem w książce ANSI C

C/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;
}

C/C++
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;
}

C/C++
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.

C/C++
#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?
P-143780
« 1 »
  Strona 1 z 1