Itoa (C)

C -  ohjelmointikielen itoa -funktio palauttaa määritetyn kokonaisluvun sijaintimerkinnän annetulla kantaluvulla (esim. kantaluvun 7 luku 10 kirjoitetaan "13"). Tätä funktiota ei ole määritelty millään standardilla C-kielellä, mutta usein kääntäjät tukevat sitä otsikon avulla, koska se on merkitykseltään hyvin lähellä tavallista kirjastotoimintoa . <stdlib.h>atoi

void* itoa(int input, char *buffer, int radix)

itoahyväksyy välitetyn kokonaisluvun inputja palauttaa sen esityksen peruslukujärjestelmässä radix(jonka tulee ottaa arvot välillä 2-36). Tulostusaakkoset koostuvat 36 merkistä - ensin 10 arabialaista numeroa, sitten 26 tavallista latinalaista kirjainta. Tuloksena oleva luku (perusnumeroiden sarja radix) kirjoitetaan lähtöpuskuriin buffer.

Toteutuksesta riippuen se itoavoi palauttaa osoittimen puskurin ensimmäiseen merkkiin buffertai se voidaan rakentaa välittämään null - buffer, jolloin funktio palauttaa kirjoitetun merkkijonon pituuden oikeaan buffer.

Jos haluat muuntaa luvun merkkijonoksi, jonka kantaluku on 8 (oktaali), 10 (desimaali) tai 16 ( heksadesimaali ), standardien mukainen vaihtoehto on käyttää tavallista kirjastofunktiotasprintf .

Toteutus Kernighan ja Ritchie

Toiminto itoaesiintyi Brian Kernighanin ja Denis Ritchien C-ohjelmointikielen ensimmäisessä painoksessa sivulla 60. C-ohjelmointikielen ("K&R2") toinen painos sivulla 64 sisälsi seuraavan toteutuksen itoa. Kirja panee merkille useita tähän toteutukseen liittyviä ongelmia, mukaan lukien se, että se ei pysty käsittelemään oikein pienintä negatiivista lukua  −2 konesanan pituutta bitteinä-1 . [yksi]

/* itoa: muuntaa n merkeiksi s:ssä */ void itoa ( int n , char s []) { int i , merkki ; if (( merkki = n ) < 0 ) /* kirjoita merkki */ n = -n ; _ /* tee n:stä positiivinen luku */ i = 0_ _ tee { /* luo numerot käänteisessä järjestyksessä */ s [ i ++ ] = n % 10 + '0' ; /* hanki seuraava numero */ } while (( n /= 10 ) > 0 ); /* poista */ jos ( merkki < 0 ) s [ i ++ ] = '-' ; s [ i ] = '\0' ; käänteinen ( t ); }

reverseKaksi sivua aikaisemmin toteutettu toiminto :

#include <string.h> /* käänteinen: käänteinen merkkijono s paikallaan */ void reverse ( merkkiä [ ]) { int i , j ; char c ; for ( i = 0 , j = strlen ( s ) -1 ; i < j ; i ++ , j -- ) { c = s [ i ]; s [ i ] = s [ j ]; s [ j ] = c ; } }

Funktio itoa(ja samanlainen funktio ftoa, joka muuntaa liukulukuluvut merkkijonoksi) on lueteltu Unix -käsikirjan ensimmäisessä versiossa . [2] Toisin kuin yllä olevissa versioissa, Unix-kirjastoversiolla oli samanlainen käyttöliittymä kuin

void itoa(int input, void (*subr)(char))

ja kutsuttiin takaisinsoittorutiini subr jokaiselle lähtörivin merkille, mikä eliminoi suuren puskurin tarpeen tallentaa koko rivi kerralla.

Katso myös

Muistiinpanot

  1. Ratkaisu tähän ongelmaan on kohdassa "K&R2 solutions" Arkistoitu 3. maaliskuuta 2010 Wayback Machinessa osoitteessa clc-wiki.net .
  2. "Unix Programmer's Manual" Arkistoitu 18. toukokuuta 2008. , 3. marraskuuta 1971. Luku "Kirjaston rutiinit" Arkistoitu alkuperäisestä 9. toukokuuta 2008. .

Linkit