String programm klappt nicht



  • huhu,
    ich habe die Aufgabe ein Programm zu schreiben,
    welches Wörter in einen Vector einließt und diese in Groß-
    buchstaben umwandelt.
    So bin ich vorgegangen:

    #include <iostream>
    #include <vector>
    #include <string>
    
    using std::cout;
    using std::endl;
    using std::cin;
    using std::vector;
    using std::string;
    
    int main()
    {
       vector<string> ivec;
       string vcin(0);
       while (cin >> vcin) {
          ivec.push_back(vcin);
       }
       string string1;
       string string2;
       char chararray[100];
       for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix) {
          string1 = ivec[ix];
          chararray[ix] = toupper(string1[ix]);
          string2[ix] = chararray[ix];   //hier ist der fehler
          cout << string2;
       }
       system("PAUSE");
       return 0;
    }
    

    Ich habe den Fehler wo ich glaube das er ist markiert.
    Weiß einer wie ich das lößen könnte?
    Vielen dank schon mal ich freue mich auf jede Antwort
    p.s. bitte kein anderes Programm oder so posten.
    Ich muss das in dieser Methode machen



  • ehm ja ist klar, da ist einiges falsch ... also wenn du es mit deinem Ansatz machen willst:

    #include <iostream>
    #include <vector>
    #include <string>
    #include <cctype>
    
    int main()
    {
    	std::vector<std::string> data;
    	std::string line;
    	while (std::cin >> line && line != "ready") data.push_back(line);
    
    	for (std::vector<std::string>::size_type i(0); i != data.size(); ++i) 
    	{
    		for (std::string::size_type pos(0); pos < data[i].length(); ++pos)
    			data[i][pos] = std::toupper(data[i][pos]);
    		std::cout << data[i] << std::endl;
    	}
    	std::cin.get();
    }
    

    ...

    #include <iostream>
    #include <vector>
    #include <string>
    #include <cctype>
    #include <iterator>
    #include <algorithm>
    
    int main()
    {
    	std::vector<std::string> data;
    	std::string line;
    	while (std::cin >> line && line != "ready") data.push_back(line);
    
    	for (std::size_t i(0); i < data.size(); ++i)
    		std::transform(data[i].begin(), data[i].end(), data[i].begin(), std::toupper);
    
    	std::copy(data.begin(), data.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    	std::cin.get();
    }
    

    wäre das mitn paar Algos ...



  • Hi Flash,

    Dein Fehler ist, dass Du eine innere Schleife weggelassen hast: Du durchläufst zwar den Vektor "stringweise", aber nicht den String "char-weise":

    Gott des Flash schrieb:

    ...

    ...
       for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix) {
          // rechnet mit dem ix-ten String : OK
          string1 = ivec[ix];
          // Hoppla: Hier rechnest Du mit dem ix-ten Zeichen des ix-ten Strings !!
            chararray[ix] = toupper(string1[ix]);
            string2[ix] = chararray[ix];   //hier ist der fehler
          // ... und zwar NUR mit dem
          cout << string2;
       }
    

    ...

    Da muss noch eine Schleife drumherum. Devil hat das mit transform() ausgelagert, kannst Du aber auch "per Hand" machen.
    Übrigens: Wenn Du die Schleife mit Iteratoren aufbaust, brauchst Du keinen Index mehr (der ja sonst auch keine Rolle meht spielt:

    ...
       for (vector<int>::const_iterator ix = ivec.begin; ix != ivec.end(); ++ix) {
          // Ab hier bekommst Du dem aktuellen String mittels *ix bzw. ix-> ....
    

    Gruß,

    Simon2.



  • @Simon2: Ich hatte beide Varianten (einmal std::transform-Algo und einmal manuel) aufgezeigt ^^ Guck's dir nochmal an 😛 Ehm und es muss ein vector<string> und nicht vector<int> sein 😛



  • (D)Evil schrieb:

    @Simon2: Ich hatte beide Varianten (einmal std::transform-Algo und einmal manuel) aufgezeigt ...

    😕
    Warum sagst Du, was ich schon weiß `?
    Ich wollte lediglich den "transform-Ansatz" ein klein wenig näher erläutern.

    (D)Evil schrieb:

    ...vector<int> sein 😛

    Stimmt....ich gehe aber davon aus, dass das oben auch nur ein Tippfehler gewesen ist. Ich wüsste nicht, wie sonst

    Gott des Flash schrieb:

    ...
    string1 = ivec[ix];
    ...
    

    compiliert werden sollte.

    Gruß,

    Simon2.



  • vielen dank es Funktioniert jetzt


Log in to reply