Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 05. 10. 2011 14:37

Tlacenka
Místo: Brno
Příspěvky: 52
Reputace:   
 

Zkraceni vstupu v C

Zdravim,
Uz delsi dobu premyslim nad problemem jak "zkratit" vstupni hodnotu v C. Jedna se o problematiku kdy uzivatel zada nejake cislo:

Vstup: 000000098706

... nemuzu prijit na algoritmus ktery by z tohoto vstupu ulozil pouze to cislo 9876 a pritom ty nuly na zacatku vstupu ignoroval.

Vstup: 00000098706
Vystup: 98706

Predem dekuji za jakekoliv reakce a vasi trpelivost :)


Nejsem dokonalý a i já dělám chyby z kterých se holt učim.

Offline

 

#2 05. 10. 2011 14:58 — Editoval jindra (05. 10. 2011 15:01)

jindra
Příspěvky: 78
Reputace:   
 

Re: Zkraceni vstupu v C

Já bych to řešil asi takto:

Načíst vstup do stringu(pole charů)
Pak bych procházel od začátku, dokud bych nenarazil na číslo jiné než 0, to přidal do dočasného pole charů.
Z dočasného pole bych pomocí funkce atoi zkonvertoval string na int.

Offline

 

#3 05. 10. 2011 15:15 — Editoval musixx (05. 10. 2011 15:16)

musixx
Místo: Brno
Příspěvky: 1771
Reputace:   45 
 

Re: Zkraceni vstupu v C

A když už je vstup jednou v řetězci (třeba čtením od uživatele z klávesnice, to je jedno), proč nepoužít standardní sscanf() nebo nějakou jeho secure-obdobu?

Code:

#include <stdio.h>

int main(void)
{
  int i;
  char c[] = "000314";

  sscanf(c, "%d", &i);

  printf("%d", i);

  return 0;
}

Offline

 

#4 05. 10. 2011 15:28

Tlacenka
Místo: Brno
Příspěvky: 52
Reputace:   
 

Re: Zkraceni vstupu v C

Jo zapomel sem prave dodat bez pouziti scanf a dalsi podobne funkce. Ale to atoi je uzasna vecicka presne takhle sem i to predstavoval :) Diky :)


Nejsem dokonalý a i já dělám chyby z kterých se holt učim.

Offline

 

#5 07. 11. 2011 21:21

NaEx
Zelenáč
Příspěvky: 5
Reputace:   
 

Re: Zkraceni vstupu v C

Při jedné úloze jsem řešil úplně stejný problém, vyřešil jsem to algiritmem, který "posouval" dané pole doleva, dokud byla na první pozici nula. Implementace následovně:


if (pole[0]=='0') while (pole[i]=='0') i++; 
                                 if(i!=0)
                                 {
                                 for(j=0; pole[i]!='\0'; i++,j++)
                                          pole[j] = pole[i];
                                          pole[j] = '\0';
                                 }

Offline

 

#6 07. 11. 2011 23:16 — Editoval frank_horrigan (07. 11. 2011 23:16)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Zkraceni vstupu v C

Jinak, pokud můžeš použít plusplusové vymoženosti, tak si includni iostream, a vstup můžeš načíst pomoci objektu std::cin do intu, a std::cin ti rovnou první (nevýznamný) nuly ořízne sám o sobě....

tvrdíš, že to chceš v čistém C, kde samozřejmě cin a jeho příetížený operátor >> není, tak pak ta knihovní funkce atoi() ... pokud pracuješ reálnými (double, float, long double), tak použiješ atof()


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#7 08. 11. 2011 14:54

svope
Zelenáč
Příspěvky: 1
Reputace:   
 

Re: Zkraceni vstupu v C

Jednoduse kazdy znak nasob *10 a vysledek ukladej do nejake sumy. Ty nuly to bude "ignorovat", protoze 0*10=0

Offline

 

#8 08. 11. 2011 17:32

TITR
Zelenáč
Příspěvky: 16
Reputace:   
 

Re: Zkraceni vstupu v C

Code:

#include <stdio.h>
#include <string.h>
int main()
{
    char ret[] = "00000098706";
    int delka = strlen(ret);
    int cislo = 0;
    for(int i = 0; i < delka; i++)
    {
        cislo = cislo * 10 + (ret[i] - '0');
    }
    printf("%d", cislo);
    return 0;
}

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson