如果这是一个重复的问题,我很抱歉,但我已经尝试寻找答案并空手而归。所以基本上我只想在向量的后面添加字符串(单个单词),然后将存储的字符串显示为单个字符串。我是新秀。
#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个单词到一行。我知道有更简单的方法,但我只是在学习矢量而且我正在迈步。谢谢你的帮助。
答案 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;
}