Wo isn in der Schleife der Fehler?



  • das liegt afaik daran, dass du (wenn der vokal nicht a ist) gleich die innere schleife abbrichst. wenn(buchstabe nicht vokal[0]), dann break;
    du solltest das else durch

    else if(j==vokal.length()-1) 
    {
    show+="k";
    break;
    }
    

    ersetzen. alles klar?



  • ok, schau ich mir mal an!

    Aber wieso funktioniert meines nicht?



  • Hallo probier mal das

    int main(int argc, char* argv[])
    {
     int flag=0;
     string vokal = "aeiou";
    string show;
    string wort; 
    cin>>wort;
    for (unsigned int i = 0;i<wort.length();i++) 
     {
     for (unsigned int j = 0;j<=vokal.length();j++)  //hier muss fehler liegen
     {
       //wenn ich hier ein cout<<vokal[j] zum test ausgebe, kommt nur "a" 
       if (wort[i]==vokal[j])
       {
        flag=1;   //falls ein Vokal
      }
      if(flag==1)
      show+="v";
      else
      show+="k";
      flag=0;
     }
    cout<<wort<<endl;
    cout<<show<<endl; 
    getch();
    return 0;
    }
    

    Gruss
    Difu



  • ahhh zu spät, ja danke das geht!

    Kannst es mir etwas genauer erklären?



  • mal ne andere Idee: wie wär's wenn Du ne Funktion schreibst, die bei Übergabe eines Konsonanten ein k zurückgibt und bei nem Vokal v. Dann benutzt Du einfach transform auf den string.
    Dann mußt Du die Schleife nicht selber schreiben.



  • bin noch bissl anfänger!

    ALso wie meinst das jester?
    wie soll die fkt aussehen?

    Brauch ich nich immer ne schleife?

    Und was is transform?



  • #include <string>
    #include <iostream>
    #include <algorithm>
    #include <iterator>
    
    using namespace std;
    
    char toVowelOrConsonant(char c)
    {
      switch(c)
      {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
        return 'v';
      }
      return 'k';
    }
    
    int main()
    {
      string word;
      cin >> word;
    
      string result;
      transform(word.begin(), word.end(), back_inserter(result), toVowelOrConsonant);
    
      cout << result;
    }
    

    ungetestet. 🙂



  • naja das mit dem transform mach ich später mal, bin soweit im stoff noch nicht 🙂

    Aufjedenfall funktioniet das jetzt erstmal soweit, nun möchte ich nach jedem voakl einen bindestrich...

    Wie kann ich den reinbauen?

    wort.insert(i+1,"-"); //i+1,weil das nach der stelle wo übereinstimmung ist
    

    geht es nicht, da wird ne endlosschleife draus

    PS: habe auch einen neuen string gemacht(weil oben ja auf wort.length() geprüft wird), wird aber auch endlosschleife!



  • Wieso hängst du nicht einfach statt nur dem 'v' ein "v-" an?

    Also statt

    ...
    show += 'v';
    ...
    

    so:

    ...
    show += "v-";
    ...
    

    Caipi



  • weil nich in den show string sondern in das richtige wort die striche rein sollen!

    ALso HAllo zu Ha-llo...



  • Wie wär's mit sowas:

    string result;
    
    for(size_t i=0; i1=word.length(); ++i)
    {
      result += word[i];
      if(isVowel(word[i])
      {
        result += '-';
      }
    }
    

    MfG Jester



  • das probier ich mal aus!

    Kann mir aber jmd mal sagen, wieso das bei meiner schleife mit dem insert() nicht geht?



  • Oh, dann habe ich dich wohl falsch verstanden.
    Ansonsten denke ich mal, dass es so wie du es dir gedacht hast, laufen müsste.

    Ansonsten vergleiche auch eventuell hier:

    int main(int argc, char* argv[])
    {
            cout << "\n Wort eingeben: ";
            string input, output(""), vokal("aeiou");
            getline(cin, input);
    
            for(unsigned int i = 0; i < input.length(); ++i)
            {
                    bool isVokal = false;
                    for(unsigned int j = 0; j < vokal.length(); ++j)
                    {
                            if(input[i] == vokal[j])
                            {
                                    output += 'v';
                                    input.insert(i + 1, "-");
                                    isVokal = true;
                            }
                    }
    
                    if(!isVokal && isalpha(input[i]))
                            output += 'k';
                    else if(isspace(input[i]))
                            output += ' ';
            }
    
            cout << "\n input:  " << input;
            cout << "\n output: " << output << endl;
    
            return 0;
    }
    

    Caipi


Anmelden zum Antworten