Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » gibt es sowas wie substr?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.01.2007, 15:58 Uhr
tobias
hmm....


Hallo, gibt es sowas wie substr auch für zahlen?

ich arbeite gerade an diesem primzahlen rätsel... ich bräuchte nun z.b. von

56849 die zahl 9 oder die 8.... sozusagen suche ich ein substr für zahlen.

achja, und warum kackt die eingabeaufforderung bei diesem code immer ab?


C++:
#include <iostream>
using namespace std;

int main(void)
{
   int naturliche_zahlen[9999999];
  
   for (int i = 0; i < 9999999; i++)
   {
       naturliche_zahlen[i] = i;
   }
  
    system("PAUSE");
    return 0;
}



eigentlich bräuchte ich noch viel mehr 9er...

edit: habs jetzt so gelöst das nur zum zahlenbereich das array erstellt wird..

like: ceil(pow(16, 0.5));

wennn man rausbekommen will ob 16 eine primzahl ist... jetzt fehtl mir nurnoch das substr..

edit2: ok ich brauch doch dieses mit den 9ern... das mit der wurzel ist wieder was anderes.
--
Danke

Dieser Post wurde am 27.01.2007 um 16:25 Uhr von tobias editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.01.2007, 17:42 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Pack die Zahl in ein std::string, wende substr an und konvertier es wieder in eine Zahl
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.01.2007, 17:56 Uhr
tobias
hmm....


ja gerade da hab ich ein problem... ich bekomme lauter compilererrors..



C++:
int zahl = 1502;

char meinstring = zahl;

int meinarray[strlen(meinstring)];

for(int i= 0; i < strlen(meinstring); i++)
{
   meinarray[i] = meinstring[i];
}



also ich will jede einzelne zahl aus der variablen zahl in einem array haben, damit ich mit diesen zahlen einzeln arbeiten kann...
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.01.2007, 18:15 Uhr
0xdeadbeef
Gott
(Operator)


Zunächst mal, einfache Mathematik - die xte Stelle einer Zahl von hinten kriegt man einfach raus per

Ziffer = trunk(Zahl / 10^x) % 10

Also:

C++:
int zahl = 3210;

int ziffern[4];

ziffer[0] =  zahl         % 10;
ziffer[1] = (zahl /   10) % 10:
ziffer[2] = (zahl /  100) % 10;
ziffer[3] = (zahl / 1000) % 10;


Ansonsten, strings in C++ gehen wie folgt:

C++:
#include <string>

// ...

std::string hallo_welt= "Hallo, Welt!";
std::string hallo = hallo_welt.substr(0, 5);
std::string welt = hallo_welt.substr(7, 4);


Komplette Klassenreferenz gibts da: www.sgi.com/tech/stl/basic_string.html

char* als String zu benutzen, ist der alte C-Weg (davon ganz abgesehen hast du nur einen einzelnen char deklariert), und deutlich schwieriger zu handhaben als std::string mit all seinen Operatoren und Methoden und dem generellen Komfort-Kram. Von der automatisierten Speicherverwaltung ganz zu schweigen.

Oh, und du kannst einem String nicht so einfach ne Zahl zuweisen, das sind unterschiedliche Typen. Da musste vorher schon konvertieren (üblicherweise mit stringstream).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.01.2007 um 18:17 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.01.2007, 18:15 Uhr
Pler
Einer von Vielen
(Operator)


Also noch kann der Computer nicht für dich denken.

Code:
char meinstring = zahl;
... ist ja nun völliger Blödsinn. Mach erst mal ein paar Grundlagen. Da gibts auch Bücher mit Beispielen und so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.01.2007, 18:19 Uhr
xXx
Devil



C++:
unsigned int nNumber = 912831;
std::stringstream ss;
ss << nNumber;
std::string sTemp = ss.str();
ss.clear();
ss.str(sTemp.substr(2, 3)); // 283
ss >> nNumber;
So in etwa bekommst de die gewünschten Zahlen ^^



Bearbeitung:
Too late Waren einige schneller

Dieser Post wurde am 27.01.2007 um 18:20 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.01.2007, 18:30 Uhr
tobias
hmm....


hi, das ist genial... funktionieren tut das perfekt..

also das:


C++:
int ziffer[4];

ziffer[0] = (zahl / 1000) % 10;
ziffer[1] = (zahl /  100) % 10;
ziffer[2] = (zahl /   10) % 10;
ziffer[3] =  zahl         % 10;

cout << ziffer[0] << ziffer[1] << endl;
    system("PAUSE");
    return 0;



nu kann ich mir nun auch noch irgendwie ausgeben lassen, wieviele ziffern die zahl
überhaupt hat?

also: int zahl = 2564;

jetzt müsste ich irgendwie auf 4 kommen.. wegen 2564 sind ja 4 zahlen..
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.01.2007, 18:42 Uhr
0xdeadbeef
Gott
(Operator)


Mathematisch gesehen hat die unendlich viele Ziffern, nur sind die meisten davon halt 0. Ich glaube, was du willst, ist weniger eine Zahl als mehr ein String, der zufällig halt Zahlen beinhaltet. Versuchs mal mit

C++:
std::string s = "12345";

int anzahl_ziffern = s.size();
int ziffer[5];

ziffer[0] = s[0] - '0'; // von Zeichen zu Zahl umrechnen
// ...


Merke dabei allerdings, das in dem Fall im Gegensatz zur vorherigen Umrechnung von links nach rechts, und nicht von rechts nach links, aufgerollt wird. ziffer[0] wäre hier also 1. Ansonsten, wenn du bei der Zahl bleiben willst, denkbar ist auch

C++:
#include <sstream>

// ...

int zahl = 1234;
std::istringstream isstr;
int anzahl_ziffern;

isstr << zahl;
anzahl_ziffern = isstr.str().size();


...das halte ich allerdings für einen etwas dreckigen hack. Ich würd an deiner Stelle wirklich die Leerzeichen in der Datei drinlassen, dann kannst dus gleich aufgespalten in ein array einlesen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.01.2007 um 18:44 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.01.2007, 18:56 Uhr
tobias
hmm....


Darum geht es nicht, ich arbeite noch an etwas anderem....

man soll eine zahl eingeben können in der console... Z.b. 256478

jetzt besteht diese zahl ja aus 6 ziffern...

und an die anzahl der ziffern muss ich für eine for schleife drankommen damit ich wie oben, die zahl in ihre einzelnen ziffern zerlegen kann...

hoffe ich habs jetzt besser erklärt.
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.01.2007, 19:05 Uhr
0xdeadbeef
Gott
(Operator)


Achso. In dem Fall würd ich folgendes vorschlagen:

C++:
#include <iostream>
#include <vector>

int main() {
  std::vector<int> ziffern;
  int zahl;

  std::cout << "Zahl eingeben: " << std::flush;
  std::cin >> zahl;

  while(zahl > 0) {
    ziffern.push_back(zahl % 10);
    zahl /= 10;
  }

  std::cout << ziffern.size() << " Ziffern, und zwar:" << std::endl;
  for(int i = 0; i < ziffern.size(); ++i) {
    std::cout << ziffern[i] << std::endl;
  }
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.01.2007 um 19:09 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: