Forum: PC-Programmierung Frage zu Vektoren und Strings in C++


von c++ anfänger (Gast)


Lesenswert?

Ich bin gerade dabei C++ zu lernen.

Die erste Aufgabe die wir bekommen haben erfordert den Umgang mit 
Strings und Vektoren. Und zwar soll folgendes gemacht werden:

Das Programm übernimmt beliebig viele übergebene Parameter. Für jeden 
dieser Parameter wird ein neuer String erstellt und diese Strings in der 
Reihenfolge der Parameter in einem vector gespeichert. Im Anschluss gibt 
das Programm zuerst in einer einzelnen Zeile die Länge des Vectors 
(Anzahl der Parameter) sowie die Länge jedes einzelnen Strings (Anzahl 
der Zeichen) in Reihenfolge der Parameter an.

Mein Code schaut so aus:
1
#include <iostream>
2
#include <string>
3
#include <vector>
4
5
using std::cout;
6
using std::cin;
7
using std::endl;
8
9
int main(int argc, char *argv[])
10
{ int count;
11
  std::vector<std::string> argument_vector(argc);
12
13
  cout << argc << endl;
14
15
  for(count = 0; count < argc; count++)
16
  {
17
    argument_vector.at(count) = argv[count];
18
    cout << "Ausgabe von argv:" << argument_vector.at(count) << endl;
19
    cout << "Größe:" << strlen(argument_vector.at(count)) << endl;
20
  }
21
22
  cin >> count;  // Nur damit das Fenster nach der Ausführung in CMD offen bleibt
23
24
}

Jetzt kenn ich aus C noch Funktionen wie strlen oder sizeof.
Nur funktioniert das in C++ nicht so recht. strlen erwartet einen 
Pointer auf die Strings, jedoch ist argument_vector.at(count) kein 
pointer.
Kennt jemand eine Funktion mit der das leicht zu machen ist?
Kann doch nicht sein, dass das so aufwendig ist^^.

lg

von Sven B. (scummos)


Lesenswert?

std::string hat eine size()-Methode. ;)

von c++ anfänger (Gast)


Lesenswert?

Hey!

Hat sie in der Tat. Diese gibt mir aber nur die Anzahl der Elemente des 
Vektors zurück. Was ich benötige ist quasi die Größe jedes Elementes.

MfG

von Sven B. (scummos)


Lesenswert?

Wenn die die Größe des Vektors haben willst, rufst du 
argument_vector.count() auf. Wenn du die Größe eines Elements willst, 
rufst du argument_vector.at(index).count() auf.

Die Größe "jedes Elements" gibt es nicht, denn die sind i.A. alle 
unterschiedlich groß.

Grüße,
Sven

von c++ anfänger (Gast)


Lesenswert?

Gut, das wars xD!

Danke. Wusste nicht, dass man die Methoden so schön kombinieren kann ;)!

MfG

von Sven B. (scummos)


Lesenswert?

Ja, Objektorierung ist ein schönes Konzept, wenn man es richtig 
verwendet ;)

von Yet another c++ anfänger (Gast)


Lesenswert?

Hallo,

du gehst durch int argc  in  int main(int argc, char *argv[])
doch davon aus, dass bei der Parameterübergabe als erster Parameter 
angegeben wird wie viele Parameter im ganzen übergeben wird.
Wenn du die Funktion aber mit "a ab abc abcd" aufrufen willst, wie soll 
dass gehen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wo ist das Problem? Das Array

  char *argv[]

ist ein Array von char-Pointern.

Man kann also auch schreiben

  char **argv

Und damit enthält

  argv[1] einen Pointer auf "a",
  argv[2] einen Pointer auf "ab",
  ...
  argv[4] einen Pointer auf "abcd"

  argv[0] hingegen enthält einen Pointer auf den Namen
  des Programmes, also z.B. "meinprogram.exe"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.