Forum: PC-Programmierung Leading Zeros in c++


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Alex (Gast)


Lesenswert?

Hey

mit folgender Schleife kann ich alle Zahlen von 0 bis 199 ausgeben
Ich möchte nun bei einstelligen Zahlen abwechselnd keine, eine oder zwei 
0 asugeben, und bei zweistelligen eine oder zwei. Wie bekomm ich dies 
mit möglichst wenig Code hin?

for (c = 0; c < 200; c++) {
   cout << c << endl;
}

von hey (Gast)


Lesenswert?

Hey du müsstest den Code erweeitern

von Rolf M. (rmagnus)


Lesenswert?

Das klingt sehr nach einer Hausaufgabe. Wie würdest du es denn lösen? 
Dann kann man dir Tipps geben, was man besser machen kann.

Alex schrieb:
> Ich möchte nun bei einstelligen Zahlen abwechselnd keine, eine oder zwei
> 0 asugeben, und bei zweistelligen eine oder zwei.

Und bei dreistelligen?

von AmAstKlebtUhu (Gast)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Nimm printf, damit geht alles viel einfacher, kürzer und lesbarer als 
mit diesen verkorksten Streams.

von Oliver S. (oliverso)


Lesenswert?

Demnächst wird aber alles sehr viel besser ;)

https://www.heise.de/developer/artikel/std-format-in-C-20-4919132.html

Oliver

von udok (Gast)


Lesenswert?

Alex schrieb:
> mit folgender Schleife kann ich alle Zahlen von 0 bis 199 ausgeben
> Ich möchte nun bei einstelligen Zahlen abwechselnd keine, eine oder zwei
> 0 asugeben, und bei zweistelligen eine oder zwei. Wie bekomm ich dies
> mit möglichst wenig Code hin?

1
for (c = 0; c < 200; c++)
2
    printf("%.3d\n", c);

von Dings vom Dach (Gast)


Lesenswert?

Mit C++ < 20 und ohne printf ist es tatsächlich etwas blöd:
1
for(c = 0; c < 200; c++)
2
  std::cout << std::setw(3) << std::setfill('0') << c << std::endl;

Mit C++20:
1
for(c = 0; c < 200; c++)
2
  std::cout << std::format("{:03}\n", c);

BTW: Ich bin mir aber nicht sicher, ob du das überhaupt meinst.
"bei einstelligen Zahlen abwechselnd keine, eine oder zwei 0 ausgeben" 
wäre ja so etwas:
1
1
2
02
3
003
4
4
5
05
6
006
7
7
8
08
9
009

von Klaus W. (mfgkw)


Lesenswert?

... und "bei zweistelligen eine oder zwei" kommt mir auch nicht 
plausibel vor.
Eher bei zweistelligen keine oder eine.

Vielleicht doch besser gleich die Aufgabe scannen und hier reinstellen?

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Alex schrieb:
> for (c = 0; c < 200; c++) {
>    cout << c << endl;
> }

Alex schrieb:
> Wie bekomm ich dies
> mit möglichst wenig Code hin?

Eine Zeile einfügen :)
1
  for (int c = 0; c < 200; c++) {
2
    for (int i=0; i<c%(3-(c>9))-(c>99); ++i) cout << '0';   
3
    cout << c << endl;
4
  }


Fängt wie in deiner Vorgabe bei "0" an, erste Werte:
1
0
2
01
3
002
4
3
5
04
6
005
7
6
8
07
9
008
10
9
11
10
12
011
13
12
14
013
15
14
16
015
17
16
18
017
19
18
20
019
21
...

von Dings vom Dach (Gast)


Lesenswert?

Oder alternativ mit einer Schleife:
1
std::cout << std::setfill('0');
2
for(int c = 0; c < 200; c++)
3
{
4
  std::cout << std::setw(c < 10 ? c % 3 + 1 : c % 2 + 2) << c << std::endl;
5
}

von Axel R. (axlr)


Lesenswert?

is natürlich extrem witzig, den TO so vorzuführen.
Er meint sicher was anderes.
"abwechselnd eine oder mehrere nullen" steht da aber. Muss er wohl 
durch.
(schmunzel)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.