Länge des Strings und Teilstrings auslesen(C++)

Wie die Fehlermeldung schon sagt, strlen erwartet einen 'const char*' als Parameter. string ist was anderes. Wenn Du
Code:
int laenge = strlen(sName.c_str());
verwendest, sollte es gehen.
 
@umbrasaxum:
Bitte vielmaligst um Verzeihung!
Das nächste Mal warte ich ne halbe Stunde, bevor ich auf ein Post antworte. Es KÖNNTE ja sein, daß Du auch gerade drauf antwortest.
 
also mit
Code:
size_type laenge = str1.length();
bekomm ich eine fehlermeldung.
LOG:
Code:
Compiler: Default compiler
Building Makefile: "C:\programmieren\cpp\NamesCheck\Makefile.win"
Führt  make... aus
make.exe -f "C:\programmieren\cpp\NamesCheck\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Programme/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Programme/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Programme/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Programme/Dev-Cpp/include/c++/3.4.2"  -I"C:/Programme/Dev-Cpp/include"   

main.cpp: In function `int main()':
main.cpp:55: error: `size_type' undeclared (first use this function)
main.cpp:55: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:55: error: expected `;' before "laenge"

main.cpp:56: error: `laenge' undeclared (first use this function)

make.exe: *** [main.o] Error 1

Ausführung beendet

und mit
Code:
 int laenge = strlen(str1.c_str());
bekomm ich eine falschen wert
 
ah danke jetzt komm des richtig raus mal schauen ob ich des jetzt so verweden kann ich ich will!

ahhhh
will nicht so gehen wie ich will!

mein code:
Code:
    string sName;
    cout << "Stringeingabe:" << endl;
    cin >> sName;
    
    cout << sName << endl;
   
   size_t laenge = sName.length();
   cout << "Hier die laenge: \n" << laenge << endl << endl;

Dann hab ich Test it eingegebn jedoch erhalte ich nur die anzahl von den Test also 4
Wieso?

Kompletter Code:
Code:
#include <string>
#include <iostream>

int main( ) 
{
   using namespace std;
//   string  str1 ("Das ist ein Test");
    string sName;
    basic_string <char> cB;
    int i, iBst[256], iA;
    cout << "Stringeingabe:" << endl;
    cin >> sName;

    cout << sName << endl;
   
   size_t laenge = sName.length();
   cout << "Hier die laenge: \n" << laenge << endl << endl;
   
   for (i=1;i<laenge;i++)
   {
       cB = sName.substr ( i , 1 );
       iA = (int)cB;
       iBst(iA) = iBst(iA) + 1;
   }
   
   for (i=1;i<256;i++)
   {
       if (iBst(i)>0)
       {
                     cout << (char)i << ": \t" << iBst(i) << endl << endl;
       }
   }

   system("PAUSE");
   return EXIT_SUCCESS;
}
 
Zuletzt bearbeitet:
Zitat aus Einführung in C++
http://cips02.physik.uni-bonn.de/~wittsche/orientierungstutorium/cpp2ii.htm

Wenn jedoch eine ganze Zeile in einen String eingelesen werden soll, so kann man nicht mehr cin verwenden, da hier die Eingabe nur bis zum ersten whitespace (Leerzeichen, Tabulator (\t), Zeilensprung (\v), Seitenvorschub (\f) und Zeilenendkennung (\n)) in den string eingelesen wird. Anstelle dessen verwendet man den Befehl getline.

Hier also richtig:
PHP:
#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    string sEingabe;
    cout << "Stringeingabe:";
	getline (cin, sEingabe); 

	int iLaenge = sEingabe.length();

	//Ergebnis als Stream speichern
	ostringstream ssErgebnis;
	ssErgebnis << "Stringlaenge # " << iLaenge << endl;

	//jetzt als String
	string stringErgebnis = ssErgebnis.str();

	cout << "Das Ergebnis der Berechnung"  << endl << sEingabe <<endl << stringErgebnis; 

    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Also das geht mit der kompletten zeile jedoch funktioniert des andere nicht :(
also hier ist der vb-code der einwandfrei funktioniert:
Code:
Private Sub cmdZaehlen_Click()
Dim iB(256) As Integer
Dim sS As String
Dim i As Integer
Dim iA As Integer

List1.Clear

sS = txtName.Text
For i = 1 To Len(sS)
    iA = Asc(Mid$(sS, i, 1))
    iB(iA) = iB(iA) + 1
Next i
For i = 1 To 255
    If (iB(i) > 0) Then
        List1.AddItem (Chr$(i) & ": " & iB(i))
    End If
Next i
End Sub

und hier meine umsetzung in c++:
Code:
#include <string>
#include <sstream>
#include <iostream>

int main( ) 
{
   using namespace std;
//   string  str1 ("Das ist ein Test");
    string sName;
    basic_string <char> cB;
    int i, iBst[256];
    cout << "Stringeingabe:" << endl;
    getline (cin, sName);

    cout << sName << endl;
   
   //size_t laenge = sName.length();
   int iLaenge = sName.length();
   cout << "Hier die laenge: \n" << iLaenge << endl << endl;
   
   for (i=1;i<iLaenge;i++)
   {
       cB = sName.substr ( i , 1 );
       char iA = (char)cB;
       iBst[iA] = iBst[iA] + 1;
   }
   
   for (i=1;i<256;i++)
   {
       if (iBst[i]>0)
       {
                     cout << (char)i << ": \t" << iBst[i] << endl << endl;
       }
   }

   system("PAUSE");
   return EXIT_SUCCESS;
}
die fettmarkierte zeile bekomm ich eine fehlermeldung:

Code:
#include <string>
#include <sstream>
#include <iostream>

int main( ) 
{
   using namespace std;
//   string  str1 ("Das ist ein Test");
    string sName;
    basic_string <char> cB;
    int i, iBst[256];
    cout << "Stringeingabe:" << endl;
    getline (cin, sName);

    cout << sName << endl;
   
   //size_t laenge = sName.length();
   int iLaenge = sName.length();
   cout << "Hier die laenge: \n" << iLaenge << endl << endl;
   
   for (i=1;i<iLaenge;i++)
   {
       cB = sName.substr ( i , 1 );
       char iA = (char)cB;
       iBst[iA] = iBst[iA] + 1;
   }
   
   for (i=1;i<256;i++)
   {
       if (iBst[i]>0)
       {
                     cout << (char)i << ": \t" << iBst[i] << endl << endl;
       }
   }

   system("PAUSE");
   return EXIT_SUCCESS;
}

Danke für euere Gedult
 
Zurück