Wie kann ich eine Stringlänge auszählen?



  • Hallo,
    bin neu und schon ein Post.
    Also ich brauch hilfe und zwar sollen wir einen String einlesen (stdin). Es sollen jetzt aber nur Zahlen (int) eingelesen werde. Dann soll mit einer Basis gerechnet werden. zb. ich gebe 321 als string ein. dann soll 3*8² + 2*8¹ + 1*8° gerechnet werden. Und beim rechnen hänge ich fest!

    Ich habe schon folgendes versucht

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #define STRINGLAENGE 10
    #define BASIS 8
    
    char mystring[STRINGLAENGE];                    //Global deklariert!!!!
    //unsigned short int Wandlung;
    int Wandlung,wert_summe,wert_neu,wert_alt;
    int z,i=0;
    
    int main()                                  //Hauptfunktion
    {
    
        //unsigned short int atobin(char str[STRINGLAENGE]);
        int atobin ();
        fgets(mystring, STRINGLAENGE , stdin);
        printf("Mein string ist:%s\n",mystring);
        Wandlung = *mystring;                     //Hier  bekommt Wandlung Addy von mystring
        printf("Wandlung ergibt:%d\n",Wandlung);
        printf("atobin aufruf:\n",z);
    
      //system("PAUSE");	
      return 0;
    }
    
    int atobin (int z)                   //Die einzelnen Felder sollen ausgelesen werden
    {
    
      /*int i=0;                        //Hier sollen die einzelnen Zahlen addiert werden
        while (i='\0')
        {   
            wert_neu = *(mystring +1);
            wert_alt = wert_neu;
            wert_summe = wert_neu + wert_alt; 
            i++;
    
        }
        return wert_summe;*/
    
      while (i<5)                   //Versuch einfach nur den Zaehler zu übergeben :(
        {
          z=mystring[i];
          i++;
        }
      return z;
    
    }
    
    /*
    unsigned short int atobin (char str[STRINGLAENGE])
    {
          int B=8;   
    
             atobin = 3;//Wandlung*B;       
    
             return atobin;
    
    }
    */
    /*unsigned short int atobin (char str[10])
    {
    
             char mystring;
             int i;
             int gesamt=0;
             for (i=0,i<10,i++)
             {
    
              scanf("%d",str[mystring]);
             }   
             gesamt = str[mystring];
             return ; 
    
    }*/
    

    Die Zwei letzten Funktionen sind auch nur Versuche!

    Was ich mit dem Programm machen wollte: Ich wollte in der int atobin (int z) Funktion nur mal die Zeichen des String zählen....aber bekomme nur ne 0 im printf übergeben.

    Bitte kann mir einer dabei helfen, daß ich das hinbekomme?

    Ich danke euch schonmal für alles!!!!!

    Gruß

    Torsten

    PS ich nutze den DEV c++ 4.9.xxx



  • Vielleicht würde es helfen wenn Du

    - eine Frage zu eine C++ Problem auch im C++ und nicht im C# Forum postest.

    - mal den Unterschied zwischen einem char-array und einem String nachlesen würdest. Gerade wenn Du von C++ redest ist mit einem String typischerweise die Klasse std::string gemeint und nicht ein char-array (wie Du es verwendest)

    - mal nachliest was die ASCII-Darstellung von Zeichen ist. Der ASCII-Wert von "2" ist z.B. nicht 2, sondern 50, ein *mystring gibt Dir aber die ASCII-Werte der Zeichen zurück...

    - mal nachliest was der Unterschied zwischen = und == ist.
    while (i='\0') ist eine Zuweisung, wird also immer 0 sein, ergo imemr false, ergo wird die Schleife nie durchlaufen. (Mal davon abgesehen das Du ja mystring[i] auf \0 prüfen solltest, und nicht die Zählvariable.

    - ... ach ja, *(mystring+1) ist das gleiche wie mystring[1] ...

    - ... aussedem... globale variablen so zu vewenden ist bah bah, erst recht wenn das mal C++ werden soll

    PS: Das was Du da wirklihc machst ist reines C, kein C++. Aber das ist ein anderes Thema... Sicher, ich reite auf solchen Kleinlichkeiten rum wie dem Unterschied zwischen C, C++ und C#, aber es sind drei unterschiedliche Sprachen, man sollte also schon selber klar ansagen können in welcher der drei Sprachen man denn nun arbeiten will.



  • Dachte das ist dass richtige Forum. Soll ja auch C sein.

    Verschiebt es, wenn es im Falschen Forum ist.

    Du glaubst nicht was ich schon am lesen bin. 😞

    Hab extra mir für C was besorgt.

    Strings haben doch ein \0 als Ende Markierung,Oder?

    Dann ist das schon flasch oder? Dann muss ich besser mit einem Vektor arbeiten?Aber wie weiss ich dann,wann keine Zahl mehr im Vektor steht?



  • Torstenda schrieb:

    Dachte das ist dass richtige Forum. Soll ja auch C sein.

    C (ausgesprochen Ceeee) Ist eine prozedurale Sprache die vor allem im letzten jahrhundert weit verbreitet war. Da irgendwann für C ein Standart gebildet wurde redet man auch gerne von ANSI C (siehe Forum mit Titel Ansi C)

    C++ (C Plus Plus) Ist eine Objektorientierte Sprache die aufgrund gewisser Historischer Gegebenheiten C noch als Untermenge hat (daher kann ein C++ Compiler meistens auch noch C compilieren). Trotzdem sollte man C und C++ als zwei grundlegend verschiedene Sprachen betrachten. (siehe Forum C++)

    C# (CSharp oder in seltenen Fällen auch CPound) Ist eine der .NET Sprachen von Microsoft die wohl eher aus reinen Marketinggründen namentlich die Nähe zu C++ sucht, sich aber viel mehr an der Sprache Java bedient hat als es darum ging Ideen zu klauen 😉 (siehe Forum C#)

    Torstenda schrieb:

    Strings haben doch ein \0 als Ende Markierung,Oder?

    Jein. In C werden Zeichenketten mit 0 terminiert, das ist richtig, und werden dort auch gerne als Strings bezeichnet. Jedoch muß man mit dem Begriff aufpassen, weil die Klasse String von C++ udn C# halt zwar das gleiche macht, eben Zeichnketten verwalten, jedoch hier nicht zwingend eine 0 am Ende stehen muß (Hängt von der Implementierung der KLasse ab)

    Früher gab es z.B. auch noch die BCPL-Strings bei denen im ersten Teichen die Länge des Strings gespeichert wurde, der dann nicht mit 0 endete.

    Auch mußt Du aufpassen, die alten C-Funktionen für Zeichnketten wie z.B. strlen liefern die Länge der Zeichenkette _ohne_ die 0. strlen("Hallo") liefert also 5 Zeichen, die Zeichenkette braucht aber 6 Zeichen, halt eins mehr fürs abschliesende 0.

    dein Ansatz mit den Schleifen an sich ist ja gar nciht so verkehrt.

    for( int i=0; mystring[i] > 0; ++i)
    {
        int zeichen = mystring[i];
        }
    

    Nur kriegst Du so nciht die Zahlenwerte, sondern die ASCII-Zeichen der Zahlen. Ist aber relativ einfach:

    Zahl : ASCII
    0 : 48
    1 : 49
    2 : 50
    ...

    den Rest solltest Du Dir denken können. Die "Umrechnung" von ASCII nach Zahlenwert ist simpel: wert = zeichen - 48;

    Torstenda schrieb:

    Dann muss ich besser mit einem Vektor arbeiten?

    Vektor = C++, Du sagtest aber C....



  • Ja, im letzten jahrhundert war C angesagt....aber was will man machen, wenn die UNI es Labor verwendet (emacs unter Kubuntu)

    Stimmt. Ich brauch ja C.

    Also das mit den Zahlenwerten ist mir erstaml zweitrangig 🙂 will ja es erstmal so hinbekommen, daß der mir was übergibt.


Anmelden zum Antworten