Een vector van strings weergeven in C++

Het spijt me als dit een herhaalde vraag is, maar ik heb al geprobeerd een antwoord te zoeken en stond met lege handen. Dus eigenlijk wil ik gewoon strings (enkele woorden) toevoegen aan de achterkant van een vector en dan de opgeslagen strings weergeven als een enkele string. Ik ben nogal een groentje.

#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using namespace std;
int main(int a, char* b [])
{
    vector<string> userString;      
    string word;        
    string sentence = "";           
    for (decltype(userString.size()) i = 0; i <= userString.size() - 1; i++)
    {
        cin >> word;
        userString.push_back(word);
        sentence += userString[i] + " ";
    }
    cout << sentence;
    system("PAUSE");
    return 0;
}

Waarom werkt dit niet?

BEWERKEN

int main(int a, char* b [])
{
    cout << "Enter a sequence of words. Enter '.' \n";
    vector<string> userString;      
    string word;                    
    string sentence = "";           /
    int wordCount = 0;
    while (getline(cin, word))
    {
        if (word == ".")
        {
            break;
        }
        userString.push_back(word);
    }
    for (decltype(userString.size()) i = 0; i <= userString.size() - 1; i++)
    {
        sentence += userString[i] + " ";
        wordCount += 1;
        if (wordCount == 8)
        {
            sentence = sentence + "\n";
                    wordCount = 0;
        }
    }
    cout << sentence << endl; 
    system("PAUSE");
    return 0;
}

Dus mijn nieuwe programma werkt. Het plaatst gewoon waarden aan de achterkant van een vector en drukt ze uit 8 woorden op een regel. Ik weet dat er eenvoudigere manieren zijn, maar ik ben gewoon vectoren aan het leren en ik ga in kleine stapjes. Bedankt voor de hulp jongens.


Antwoord 1, autoriteit 100%

Omdat userString leeg is. U geeft het alleen aan

vector<string> userString;     

maar voeg nooit iets toe, zodat de for-lus niet eens wordt uitgevoerd.


Antwoord 2, autoriteit 80%

Uw vector<string> userStringheeft grootte 0, dus de lus wordt nooit ingevoerd. Je zou kunnen beginnen met een vector van een bepaalde grootte:

vector<string> userString(10);      
string word;        
string sentence;           
for (decltype(userString.size()) i = 0; i < userString.size(); ++i)
{
    cin >> word;
    userString[i] = word;
    sentence += userString[i] + " ";
}

hoewel het niet duidelijk is waarom je de vector nodig hebt:

string word;        
string sentence;           
for (int i = 0; i < 10; ++i)
{
    cin >> word;
    sentence += word + " ";
}

Als u geen vaste limiet wilt voor het aantal invoerwoorden, kunt u std::getlinegebruiken in een while-lus, waarbij u controleert aan de hand van een bepaalde invoer, bijv "q":

while (std::getline(std::cin, word) && word != "q")
{
    sentence += word + " ";
}

Hiermee worden woorden aan sentencetoegevoegd totdat u “q” typt.


Antwoord 3, autoriteit 40%

U moet de elementen invoegen met behulp van de -invoeg -methode in Vectoren STL, controleer het onderstaande programma om de elementen eraan toe te voegen en u kunt op dezelfde manier in uw programma gebruiken.

#include <iostream>
#include <vector>
#include <string.h>
int main ()
{
  std::vector<std::string> myvector ;
  std::vector<std::string>::iterator it;
   it = myvector.begin();
  std::string myarray [] = { "Hi","hello","wassup" };
  myvector.insert (myvector.begin(), myarray, myarray+3);
  std::cout << "myvector contains:";
  for (it=myvector.begin(); it<myvector.end(); it++)
    std::cout << ' ' << *it;
    std::cout << '\n';
  return 0;
}

Antwoord 4, Autoriteit 20%

U stelt twee vragen; Je titel zegt “een vector van snaren weergeven”, maar dat doe je niet echt, je bouwt eigenlijk een enkele snaar samengesteld uit alle snaren en uitvoer dat.

Uw vraaglichaam vraagt: “Waarom werkt dit niet”.

Het werkt niet omdat uw voor lus wordt beperkt door “gebruikersstring.size ()” die 0 is, en u test uw lusvariabele voor het “gebruikersstring.size () – 1”. De toestand van een voor () lus wordt getest voordat de uitvoering van de eerste iteratie wordt toegestaan.

int n = 1;
for (int i = 1; i < n; ++i) {
    std::cout << i << endl;
}

print precies niets.

Dus voert uw lus exact geen iteraties uit, waardoor usestring en zin leeg blijft.

Ten slotte heeft uw code absoluut geen reden om een vector te gebruiken. Het feit dat je “decltype(userString.size())” hebt gebruikt in plaats van “size_t” of “auto”, terwijl je beweert een rookie te zijn, suggereert dat je ofwel een boek van achteren naar voren leest of dat je jezelf opstelt een les niet halen.

Dus om je vraag aan het einde van je bericht te beantwoorden: het werkt niet omdat je er niet doorheen bent gegaan met een debugger en de waarden niet hebt gecontroleerd. Terwijl ik het ironisch zeg, laat ik het daarbuiten.


Antwoord 5

vector.size()retourneert de grootte van een vector. Je hebt geen string in de vector geplaatst voor de lus , dus de grootte van de vector is 0. Hij zal nooit in de lus komen. Zet eerst wat gegevens in de vector en probeer ze dan toe te voegen. U kunt invoer van de gebruiker krijgen voor het aantal tekenreeksen dat de gebruiker wil invoeren.

#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using namespace std;
int main(int a, char* b [])
{
    vector<string> userString;
    string word;
    string sentence = "";
    int SIZE;
    cin>>SIZE;    //what will be the size of the vector
    for (int i = 0; i < SIZE; i++)
    {
        cin >> word;
        userString.push_back(word);
        sentence += userString[i] + " ";
    }
    cout << sentence;
    system("PAUSE");
    return 0;
}

nog iets, je hoeft hiervoor geen vector te gebruiken. Twee strings kunnen het werk voor je doen.

#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using namespace std;
int main(int a, char* b [])
{
   // vector<string> userString;
    string word;
    string sentence = "";
    int SIZE;
    cin>>SIZE;    //what will be the size of the vector
    for (int i = 0; i < SIZE; i++)
    {
        cin >> word;
        sentence += word+ " ";
    }
    cout << sentence;
    system("PAUSE");
    return 0;
}

en als u een string wilt invoeren totdat de gebruiker dit wenst, ziet de code er als volgt uit:

#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using namespace std;
int main(int a, char* b [])
{
   // vector<string> userString;
    string word;
    string sentence = "";
    //int SIZE;
    //cin>>SIZE;    //what will be the size of the vector
    while(cin>>word)
    {
        //cin >> word;
        sentence += word+ " ";
    }
    cout << sentence;
  //  system("PAUSE");
    return 0;
}

Other episodes