Integerzahl nach vorkommen absuchen...



  • wie kann ich eine zahl darauf pruefen, ob in ihr eine bestimmte zahl vorkommt!
    Beispiel:

    Ich will alle Zahlen, in denen eine 7 enthalten ist rausfilter....
    wie komm ich an die 7 ran?



  • Hallo

    wenn du als die Zahl als Zeichenkette meinst :
    nimm std::string und benutzt std::string::find() um die 7 zu finden.

    bis bald
    akari



  • nee nee meine schon Zahl...

    for (unsigned int i = 1;i<=100;i++)
    {
    //hier soll wenn i eine 7 enthält was gemacht werden...
    }
    


  • aber so geht es doch auch oder?
    naja gut, ist im endeffekt string.... 😕

    int main(int argc, char* argv[])
    {
    stringstream sstr;
    string str;
    for(int i=1;i<=100;i++)
    {
     sstr<<i;
     sstr>>str;
     sstr.clear();
     if(str.find('7',0)!=string::npos)
      cout<<"Hallo"<<endl;   //hier eben was du machen willst
     else
      cout<<i<<endl;
    }
     getch();       return 0;
    }
    


  • Hallo

    Also ich weiß, entweder ist das ja zu einfach oder ich habs wieder falsch verstanden :

    for (unsigned int i = 1;i<=100;i++)
    {
      if (i == 7)
      {
        // mach etwas
        }
    }
    

    bis bald
    akari


  • Mod

    in string umwandeln und dann nach der 7 suchen

    #include <sstream>
    // ...
    int i=//...
    if(static_cast<std::stringstream&>(std::stringstream()<<i).str().find('7')!=std::string::npos)//...
    


  • akari schrieb:

    Hallo

    Also ich weiß, entweder ist das ja zu einfach oder ich habs wieder falsch verstanden :

    for (unsigned int i = 1;i<=100;i++)
    {
      if (i == 7)
      {
        // mach etwas
        }
    }
    

    bis bald
    akari

    naja, und 87?? da is ja 7 auch drin!



  • camper schrieb:

    in string umwandeln und dann nach der 7 suchen

    #include <sstream>
    // ...
    int i=//...
    if(static_cast<std::stringstream&>(std::stringstream()<<i).str().find('7')!=std::string::npos)//...
    

    ich glaube mal, mein ist fuer den anfaenger einfacher zu verstehen , und hat sich nach der FAQ gerichtet!



  • Hallo

    okay, dann nimm wie bereits gesagt std::string als Zwischenspeicher. Dafür hast du ja jetzt mehrere Lösungen.

    bis bald
    akari



  • akari schrieb:

    Hallo

    okay, dann nimm wie bereits gesagt std::string als Zwischenspeicher. Dafür hast du ja jetzt mehrere Lösungen.

    bis bald
    akari

    und welche ist anfängerfreundlicher? *kindergartenspielchen* 😉

    Hmm...mir fällt aber auch grad keine lösung für ints ein ohne irgendein cast oder so....


  • Mod

    5er1al(ausgeloggt) schrieb:

    ich glaube mal, mein ist fuer den anfaenger einfacher zu verstehen , und hat sich nach der FAQ gerichtet!

    meins sollte auch nicht zu ernst genommen werden - ist ja klar, dass hier auch bessere lösungen angeboten werden 🙂

    es geht im übrigen auch ganz ohne strings:

    bool has7(int i)
    {
        while ( i )
        {
            if ( i % 10 == 7 ) return true;
            i /= 10;
        }
        return false;
    }
    


  • 5er1al schrieb:

    Hmm...mir fällt aber auch grad keine lösung für ints ein ohne irgendein cast oder so....

    Man könnte noch selber die einzelnen Stellen durch Division und Modulo durch 10 abfragen und auf 7 prüfen.

    /Edit : zu spät

    bis bald
    akari



  • jo daran hatte ich überhaupt nicht gedacht.... 🙄



  • camper schrieb:

    5er1al(ausgeloggt) schrieb:

    ich glaube mal, mein ist fuer den anfaenger einfacher zu verstehen , und hat sich nach der FAQ gerichtet!

    meins sollte auch nicht zu ernst genommen werden - ist ja klar, dass hier auch bessere lösungen angeboten werden 🙂

    es geht im übrigen auch ganz ohne strings:

    bool has7(int i)
    {
        while ( i )
        {
            if ( i % 10 == 7 ) return true;
            i /= 10;
        }
        return false;
    }
    

    funktioniert das auch bei zahlen 70-71??
    bin ich mir grad nich ganz sicher...



  • ich meine 70-79

    shice ausgeloggt sein



  • Hallo

    Ja, es geht für alle Stellen, wegen dem while.

    bis bald
    akari



  • bool find(int zahl,unsigned int suchzahl){
       //wenn die zahl negativ ist, positiv machen
       if(zahl<0)zahl*=-1;
    
        //test auf 0
        if(zahl==0&&suchzahl==0){
            return true;
        }
    
        //normaler test
        while(zahl!=0){
            int stelle=zahl%10;//letzte stelle raussuchen
            if(stelle==suchzahl)
                return true;
            zahl/=10;//letzte stelle löschen
        }
        return false;
    }
    

Anmelden zum Antworten