wer kann mir bei diesem program helfen?



  • irgendwie geht das nicht, und ich weiss nicht wieso!!
    wer kann helfen? wäre echt nett, danke!!

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main(void){
    
    char * str="ABC-129";
    int i = 0;
    
    while(*(str+i)){
        if((*(str+i))>='A' && (*(str+i))<='Z')
        *(str+i)='X';
         i++;
    }
    cout << str;
    getch();
    return 0;
    }
    


  • Hallo,

    ich hebe die Klammerausdrücke immer durch Leerzeichen deutlich in ihrer Funktion hervor,
    so

    if(  (*(str+i))>='A' && (*(str+i))<='Z'  )
    

    kommt man nicht so leicht durcheinander.

    Wenn du Stringliterale im Quelltext erzeugst,
    also

    char * str="ABC-129";
    

    Dann ist das per C Standard so, dass man den String nicht verändern (beschreiben) darf.
    Deshalb schreibt man besser immer

    const char * str="ABC-129";
    

    Und wenn er verändert werden soll, dann macht man das als Array.

    char str[] = {"ABC-129"};
    


  • Ersetze folgendes:

    //char* str = "ABC-129";
      char str[] = "ABC-129";
    

    In deinem Beispiel versuchst du ein konstantes String-Literal zu ändern.
    Das darfst du nicht. Du musst, und willst sicher auch, einen String bearbeiten.
    😉



  • char * str="ABC-129";
    

    du versuchst in eine string-konstante zu schreiben. wenn du willst, daß str nicht auf eine konstante zeigt, dann mach es so:

    char str[]="ABC-129";
    

    dann legt der compiler speicher fur ein char-array an und initialisiert ihn mit der stringkonstante.

    EDIT: mist! schon wieder letzter 😃



  • Na wenigsten darüber herrscht Einigkeit 😉



  • und statt

    *(str+i)
    

    kann man auch übersichtlicher

    str[i]
    

    schreiben.



  • vielen dank für euere hilfe,
    das problem vor dem ich stand bzw. stehe ist, dass ich alle [] weglassen soll. aber wenn das ´nicht anderst geht, wie ihr zurecht auch sagt, dann muss es wohl auch so sein.

    danke



  • Das bezog sich sicher nur auf die Adressierung, damit du beide Methoden kennenlernst.

    Falls du auch in der Definition auf [] verzichtest, kannst du es auch
    über malloc/free machen.
    (Normalerweise nimmt man in C++ new/delete, aber dann brauchst du ja wieder das verbotene [] bei delete)
    Wo da der Sinn liegen soll, naja 🙄

    const char * tmp="ABC-129";
    char* str = (char*) malloc(strlen(tmp)+1); //+1 wegen /0
    strcpy(str, tmp);
    ... 
    free(str);
    


  • also, wenn das eine aufgabe ist, dann hat der lehrer/professor mit den eckigen klammern bestimmt nur den arrayzugriff gemeint und nicht die deklaration/definition.



  • oh mann, jetzt ist mir alles klar.
    wer lesen kann ist klar im vorteil *gg*
    der lehrer meinte alle indexklammern, he, he!!
    ich gehe nochmal ins bett!!!

    grüßle und danke


Anmelden zum Antworten