substr-Rückgabe

Hoeze

Mitglied
Ich habe ein kleines Testprogramm geschrieben, das mir aus einem String ("Port:25568) den String "25568" ausgeben soll:

PHP:
int main ()
{
	int portstart=5;

	string str = "Port:25568";
	if (str[portstart] = ':')
		{
			portstart++;
			int portend = portstart;
			
			while (portend<str.length()&&isdigit(str[portend]))
			{
				portend++;
			}
			int length=portend-portstart;
			string Port = str.substr(portstart,length);
			cout << Port << endl;
		}
	system("PAUSE");
}

Allerdings bekomme ich immer nur "5568" zurück, auch wenn ich substr(6,5) schreibe.
Was ist hier das Problem?
 
Der Punkt lässt sich übrigens auch generisch finden:
C++:
std::string::size_type pos = str.find(':');
if(pos == std::string::npos)
   ; // not found

if(pos + 1 >= str.length())
   ; // nichts nach dem :

std::string partPort = str.substr(pos);
 
Ist es eigendlich möglich auch ein String-Array zu erzeugen?
string str[4] etc wird wohl nicht funktioniereren :p

EDIT:
Noch was:
Ich hab jetzt ein etwas verwirrendes Problem.
PHP:
int main ()
{
	string str = "Port:25568";
	cout << str.substr(0,2)<<endl;

	system("PAUSE");
}
Ich beginne an Stelle 0 ('p') und hör an Stelle 2 ('r') auf.
Allerdings bekomme ich dann nicht das erwartete Ergebnis ("Por") sondern nur "Po".
Ändere ich jetzt die 0 in eine 1 bekomme ich "or", was dem erwarteten Ergebnis wieder entspricht.
Was zum Teufel soll dieser Unsinn?!
:confused:
 
Zuletzt bearbeitet:
Bei C++ (und eigentlich allen Programmiersprachen außer Java) ist der zweite Parameter in substr die Länge in Zeichen, nicht der End-Index (Gottseidank).

D.h. "Port:25568".substr( 0, 2 ) gibt dir zwei Zeichen ab Index 0 aus, also "Po".
 
Ich habe gerade ein Code-Beispiel gefunden, in dem das mit dem String array fuinktionieren soll:
PHP:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
  fstream fin( "list.txt" );
  string buffer;
  string tmp_array[200];
  int i=0;
  while (fin.good()) {
    getline(fin,buffer);
    tmp_array[i]=buffer;
    i++;
 }
  fin.close();
  return 0;
}
Warum funktioniert das? Ich dachte, dass man mit [x] auf eine bestimmte Stelle eines Strings zugreift?
 
Wie greife ich dann auf den Buchstaben 'u' zu, wenn ich z.B. String str[3] habe, das str[3] = "hund"?
str[3,1]?
 
Zurück