在C ++中显示字符串向量

时间:2013-07-30 04:12:05

标签: c++ vector push-back

如果这是一个重复的问题,我很抱歉,但我已经尝试寻找答案并空手而归。所以基本上我只想在向量的后面添加字符串(单个单词),然后将存储的字符串显示为单个字符串。我是新秀。

#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;
}

为什么这不起作用?

修改

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;
}

所以我的新节目有效。它只是将值放在向量的后面,并将它们打印出8个单词到一行。我知道有更简单的方法,但我只是在学习矢量而且我正在迈步。谢谢你的帮助。

5 个答案:

答案 0 :(得分:5)

因为userString为空。你只声明它

vector<string> userString;     

但从不添加任何内容,因此for循环甚至不会运行。

答案 1 :(得分:2)

您的vector<string> userString大小为0,因此永远不会输入循环。您可以从给定大小的向量开始:

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] + " ";
}

虽然目前尚不清楚为什么你需要这个载体:

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

如果您不希望对输入字数有固定限制,可以在std::getline循环中使用while,检查某个输入,例如"q"

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

这会向sentence添加字词,直到您输入&#34; q&#34;。

答案 2 :(得分:2)

您必须使用向量STL中的 insert 方法插入元素,检查以下程序以向其添加元素,并且可以在程序中以相同的方式使用。

#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;
}

答案 3 :(得分:1)

你问两个问题;你的标题是“显示一个字符串向量”,但你实际上并没有这样做,你实际上构建了一个由所有字符串组成的字符串并输出它。

您的问题正在询问“为什么这不起作用”。

它不起作用,因为你的for循环受“userString.size()”约束,并且你测试你的循环变量是“userString.size() - 1”。在允许执行第一次迭代之前测试for()循环的条件。

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

将完全没有打印。

所以你的循环完全没有迭代,只留下userString和句子。

最后,您的代码绝对没有理由使用向量。您使用“decltype(userString.size())”代替“size_t”或“auto”这一事实虽然声称自己是新手,但这表明您要么从后到前阅读一本书,要么就是在为自己辩护失败了。

所以要在你的帖子结束时回答你的问题:它不起作用,因为你没有使用调试器逐步执行它并检查值。虽然我说得很尴尬,但我会把它留在那里。

答案 4 :(得分:0)

vector.size()返回向量的大小。你没有在循环之前在向量中放置任何字符串,因此向量的大小为0.它永远不会进入循环。首先在矢量中放入一些数据,然后尝试添加它们。您可以从用户那里获取输入的字符串数量。

#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;
}

另外一件事,实际上你不必使用向量来做这件事。两个字符串可以帮你完成工作。

#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;
}

如果你想输入字符串直到用户希望,代码将是这样的:

#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;
}