int om the char

Tags:    c++

<< < 12 > >>
mig og ven arbejder på et lille program i c

vi vil gerne have at man indtaster et tal. som så bliver langt i en int og der efter laver programmet intén om til en char* . vi vil godt lave programmet uden at bruge funktionen sprintf()
og itoa

håber der er en der har en ide til hvodan vi kan lave det her




13 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Edit: ligemeget, det var ikke c++ :P



Indlæg senest redigeret d. 10.11.2008 18:07 af Bruger #3275
Hvorfor ikke bruge de funktioner der er ?
Ellers må I jo manuelt aflæse hver karakters værdi, et af gangen og løbende opdatere et resultat.
char's er byte værdier og kan aflæses som et tal. I kan så trækker '0' fra for at få tegnets værdi som en integer:

printf("%d", '7' - '0');

...udskriver: 7



Hvorfor ikke bruge de funktioner der er ?
Ellers må I jo manuelt aflæse hver karakters værdi, et af gangen og løbende opdatere et resultat.
char's er byte værdier og kan aflæses som et tal. I kan så trækker '0' fra for at få tegnets værdi som en integer:

printf("%d", '7' - '0');

...udskriver: 7


det er til en opgave

hvor beskrivelsen lyder sådan her

Topic: Write a function void itoa(int n, char *s) that will convert a given integer to a
string (i.e. if n is 345, the string s will contain “345” after the function is done).


Instructions: Give the C code to:
• The function itoa() as described above. You are not allowed to use any standard li-
brary functions, such as sprintf() or itoa() (Microsoft-speci?c) and similar to imple-
ment it. Furthermore, you have to use pointers and pointer arithmetics to implement
it, not indexing (the [] operator is prohibited!).




Du starter fra den øverste ende, dividerer med 10.000, 1.000, 100, osv, og tager modulus 10 (%10) på resultatet, og lægger karakteren '0' til.

Hvis der altid var 3 cifre i tallet:

int tal = 321;
char res[4];
res[0] = ((tal/100)%10) + '0';
res[1] = ((tal/10)%10) + '0';
res[2] = ((tal/10)%10) + '0';
res[3] = '\0';

Så vil res indeholde resultatet.

Så putter du bare det hele i en løkke som du putter ind i en funktion.



Du starter fra den øverste ende, dividerer med 10.000, 1.000, 100, osv, og tager modulus 10 (%10) på resultatet, og lægger karakteren '0' til.

Hvis der altid var 3 cifre i tallet:

int tal = 321;
char res[4];
res[0] = ((tal/100)%10) + '0';
res[1] = ((tal/10)%10) + '0';
res[2] = ((tal/10)%10) + '0';
res[3] = '\0';

Så vil res indeholde resultatet.

Så putter du bare det hele i en løkke som du putter ind i en funktion.

Jeg plejer at gøre det omvendt.
res[0] = ((tal % 10) + '0');
tal = tal / 10;
res[1] = ((tal % 10) + '0');
tal = tal / 10;

Det skriver godt nok tallet omvendt, men så ombytter jeg alle cifrene til sidst.



Du starter fra den øverste ende, dividerer med 10.000, 1.000, 100, osv, og tager modulus 10 (%10) på resultatet, og lægger karakteren '0' til.

Hvis der altid var 3 cifre i tallet:

int tal = 321;
char res[4];
res[0] = ((tal/100)%10) + '0';
res[1] = ((tal/10)%10) + '0';
res[2] = ((tal/10)%10) + '0';
res[3] = '\0';

Så vil res indeholde resultatet.

Så putter du bare det hele i en løkke som du putter ind i en funktion.

Jeg plejer at gøre det omvendt.
res[0] = ((tal % 10) + '0');
tal = tal / 10;
res[1] = ((tal % 10) + '0');
tal = tal / 10;

Det skriver godt nok tallet omvendt, men så ombytter jeg alle cifrene til sidst.




vi har fundet ud af det nu men den skriver det bare omvendt så nu skal vi finde en løsning på det



Indlæg senest redigeret d. 10.11.2008 20:31 af Bruger #5409
vi har fundet ud af det nu men den skriver det bare omvendt så nu skal vi finde en løsning på det


Godt begyndt. Jeg så lige, at en af kravene var brug af pointer aritmetik og at indeksering er forbudt. Har du også styr på den del ?

Min kode fra før skal da omskrives til noget i stil med:

*ptr = ((num % 10) + '0');
ptr++;
num = num / 10;
*ptr = ((num % 10) + '0');
ptr++;
num = num / 10;
..



vi har fundet ud af det nu men den skriver det bare omvendt så nu skal vi finde en løsning på det


Godt begyndt. Jeg så lige, at en af kravene var brug af pointer aritmetik og at indeksering er forbudt. Har du også styr på den del ?

Min kode fra før skal da omskrives til noget i stil med:

*ptr = ((num % 10) + '0');
ptr++;
num = num / 10;
*ptr = ((num % 10) + '0');
ptr++;
num = num / 10;
..


vores kode ser sådan ud indtil nu vi mangler bare og få den til og virke med - tal :)

Fold kodeboks ind/udKode 




Jeg tror ikke rigtigt at din lærer vil godkende den udgave. Mon ikke det er meningen at den anden parameter i kaldet til itoa_func skulle komme til at indeholde tallet som en streng? Så main kunne udskrive strengen?

For at kunne det skal i oprette et array i main:
char arrayVar[28];
Og kalde itoa_func som i gør nu.

I itoa_func skal så ikke gøre dette:
s = (char *)malloc(sizeof count);
(Som i øvrigt heller ikke er rigtigt, det er ikke (sizeof count), men (count)).

Den sidste loop i itoa_func forstår jeg ikke.



Jeg tror ikke rigtigt at din lærer vil godkende den udgave. Mon ikke det er meningen at den anden parameter i kaldet til itoa_func skulle komme til at indeholde tallet som en streng? Så main kunne udskrive strengen?

For at kunne det skal i oprette et array i main:
char arrayVar[28];
Og kalde itoa_func som i gør nu.

I itoa_func skal så ikke gøre dette:
s = (char *)malloc(sizeof count);
(Som i øvrigt heller ikke er rigtigt, det er ikke (sizeof count), men (count)).

Den sidste loop i itoa_func forstår jeg ikke.


Ja, I har godt nok gjort funktionen kompleks. Og så er der et par situationer, som I ikke håndterer: negative tal og 0.

I har som Bertel siger ikke brug for malloc(), men hvis I bruger malloc() skal i også huske free().

Tag et kig på følgende:
Fold kodeboks ind/udKode 




<< < 12 > >>
t