none
Wie kann ich die Anzahl von Zeichen z.B. "Hallo Welt\0" zählen? RRS feed

  • Frage

  • Ich brauche ma wieder eure tatkrätige unterstützung^^

    Ich lerne grade C bzw C++ und habe einige Aufgaben vom Internet rausgesucht.

    Leider stehen da aber keine Lösungen dabei und so hänge ich fest. Alleine schon weil ich es noch nicht so gut kann. (Ich lerne momentan Zeiger und so.)

    Aauf jeden fall ist die Aufgabe: Ich soll einen Text kopieren und danach die Zeichen von ihm ablesen und asugeben.

    Z.B. "Hello World\0" = 11 (Die \0 ist damit er das ende erkenne kann.

    Ich bin momentan so weit: Aberr ich weiß nicht wie ich weitermachen soll.

    #include "stdafx.h"
    #include <stdio.h>

    void main()
    {
        //Festlegen der Zeichenkette
        char txt1[11] = "Hallo Welt";

        char *pt1, *pt2, txt2[11];

        for (pt1 = &txt1[0], pt2 = &txt2[0]; *pt1; pt1++, pt2++)
            *pt2 = *pt1;
        pt2 = 0;

        //Ausgabe
        printf("%s\n",txt1);
        printf("%s\n",txt2);
        getchar();
    }

    Danke für eure Hilfe!

    mfg. Paul

    Mittwoch, 17. Oktober 2012 08:56

Antworten

  • Du könntest auch alternativ prüfen ob das aktuelle Zeichen in txt1 Null ist, wenn nicht das Zeichen nach txt2 kompieren, und dann zum nächsten zeichen gehen, prüfen, ob Null und dann kopieren wenn es nicht null ist. Wenn Du in txt1 dann ein Zeichen mit dem Wert Null liest, kopierst Du das, und beendest en kpiervorgang.

    Da würde sich eine While Schleife anbieten.

    • Als Antwort markiert icekeuter Donnerstag, 18. Oktober 2012 12:00
    Mittwoch, 17. Oktober 2012 09:36

Alle Antworten

  • Mit der Funktion strlen kannst Du die Länge eines Strings ermitteln:

    http://msdn.microsoft.com/en-us/library/78zh94ax.aspx

    Dann kommst Du und kopierst Zeichen für Zeichen in Deiner for Schleife die Zeichen von txt1 nach txt2.

    • Bearbeitet Bordon Mittwoch, 17. Oktober 2012 09:35
    Mittwoch, 17. Oktober 2012 09:13
  • in der Aufgabe steht ich soll das ohne strlen machen.

    Ich soll es mit einer schleife selber machen.

    Mittwoch, 17. Oktober 2012 09:22
  • Du könntest auch alternativ prüfen ob das aktuelle Zeichen in txt1 Null ist, wenn nicht das Zeichen nach txt2 kompieren, und dann zum nächsten zeichen gehen, prüfen, ob Null und dann kopieren wenn es nicht null ist. Wenn Du in txt1 dann ein Zeichen mit dem Wert Null liest, kopierst Du das, und beendest en kpiervorgang.

    Da würde sich eine While Schleife anbieten.

    • Als Antwort markiert icekeuter Donnerstag, 18. Oktober 2012 12:00
    Mittwoch, 17. Oktober 2012 09:36
  • Dann mach einfach mal eine Metjhode "MyStrLen" un mach es einfach... am besten mit einer "while" Schleife... und dann zählst Du einen Index hoch, wie oft Du prüfen musstes, bis eine "NUL" kommt.... diese Zahl giobst Du dann zurück...


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 17. Oktober 2012 09:44
  • So ich habe es geschaft :)

    Habe deins leider etwas später gelesen aber ist sehr ähnlich.

    #include "stdafx.h"
    #include <stdio.h>
    
    int Zeigerlänge(char *);
    //
    void main()
    {
    char txt[] = "Hallo Welt\0";
    int länge = 0;
    
    länge = Zeigerlänge(txt);
    printf("%s hat %d Zeichen\n",txt,länge);
    
    getchar();
    }
    /// Funktionen //////////////////////
    int Zeigerlänge(char *pt)
    {
    int anz = 0;
    
    while (*pt != '\0')	//Ich erstelle eine "While" Schleife die zählt einen Index hoch, die prüft ob eine Null kommt. Die Zahl gebe ich dann zurück
    {
    	pt++;anz++;
    }
    return anz;
    }
    Danke für die Antwort!


    Mittwoch, 17. Oktober 2012 10:02
  • Eine Anmerkung zu Deinen Variablen, Du solltest auf solche sonderzeichen wie ä,ö,ü verzichten. Es gibt viele C/C++ compiler die da einen Compilerfehler spendieren.

    Mir war es nicht einmal bekannt, dass das inzwischen geht, früher konnte das VC (ich meine VC6)nicht.

    Mittwoch, 17. Oktober 2012 10:06
  • Hallo,

    @Bordon: Da gebe ich Dir recht. Sieht ungewohnt aus, habe ich so auch noch nicht gesehen und gewusst. Ist mit Sicherheit mit der Unicode-Unterstützung rein gekommen.

    Gruß

    Mittwoch, 17. Oktober 2012 11:20
  • Hallo Badron und v.hirsch.

    Ja mitlerweile aktzeptiert das der Compiler. Ich arbeite mit der 2010.

    Die funktion ist mit dem Unicode reingekommen. Da hast du recht v.hirsch.

    Aber wird das heute von jeden Unterstützt oder nur von manchen?

    Mittwoch, 17. Oktober 2012 13:56