我正在尝试制作一些能够从用户那里获取输入的东西,将它们分成矢量中的字符串,然后一次打印一个(每行8个)。 到目前为止,这就是我所拥有的:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
int main(void)
{
using namespace std;
vector<string> svec1;
string temp;
while(getline(cin, temp)) //stores lines of text in temp
{
if(temp.empty()) //checks if temp is empty, exits loop if so.
break;
stringstream ss(temp);
string word;
while(ss >> word) //takes each word and stores it in a slot on the vector svec1
{
svec1.push_back(word);
}
}
}
我一直坚持让它一次打印8个,我试过的解决方案不断下标超出范围错误。
答案 0 :(得分:2)
这样的事情:
for(int i = 0; i < svec1.size(); i++)
{
cout << svec1[i];
if ((i+1) % 8 == 0)
cout << endl;
else
cout << " ";
}
编辑:
上面的解决方案在最后输出额外的空格/换行符。这可以通过以下方式避免:
for(int i = 0; i < svec1.size(); i++)
{
if (i == 0)
/*do nothing or output something at the beginning*/;
else if (i % 8 == 0)
cout << endl; /*separator between lines*/
else
cout << " "; /*separator between words in line*/
cout << svec1[i];
}
答案 1 :(得分:0)
使用索引遍历您的向量:
for (unsigned int idx = 0; idx < svec1.size(); ++idx) {
std::cout << svec[idx] << sep(idx); // sep(idx) is conceptual; described below
}
这是sep(idx)
是什么?它是在idx th 字之后打印的分隔符。这是
(idx+1)%8 == 0
。idx+1 == svec.size()
。一种简单的方法是使用三元运算符:
for (unsigned int idx = 0; idx < svec1.size(); ++idx) {
const char * sep = (((idx+1)%8 == 0) || (idx+1 == svec.size())) ? "\n" : " ";
std::cout << svec[idx] << sep;
}
如果您不喜欢,
for (unsigned int idx = 0; idx < svec1.size(); ++idx) {
const char * sep;
if (((idx+1)%8 == 0) || (idx+1 == svec.size())) {
sep = "\n";
}
else {
sep = " ";
}
std::cout << svec[idx] << sep;
}
答案 2 :(得分:-1)
通常使用for
循环子句迭代向量。因此,如果您要打印vector<string>
的所有元素,您必须制作如下内容:
for(vector<string>::iterator it = myvec.begin(); it != myvec.end(); ++it) {
cout << *it;
}
编辑:正如Vlad已经正确发布的那样,你也可以使用数组索引,它们在列表中效率较低,但对向量同样有效。