我需要从键盘上读取可变数量的整数,以便可以使用它们中的每一个。
首先我想我可以使用类似的东西
int myinteger;
for (int i=0; i<MAX_NUMBER_OF_INTEGERS; i++){
cin >> myinteger;
//What I want to do with that Integer
}
但是后来我意识到,如果MAX_NUMBERS_OF_INTEGERS = 10,我必须写10个整数。但是我想要的是我可以传递“ 1 2 3”“ 1 2 3 4”(例如),而不必写10个整数。
答案 0 :(得分:2)
自从提出问题以来,这个问题似乎已经有所改变,并且给出了很好的答案。这只是用来回答新问题。
#include <iostream>
#include <sstream>
#include <vector>
const int MAX_NUMBERS_OF_INTEGERS = 10;
int main() {
std::string line;
std::cout << "Enter at most " << MAX_NUMBERS_OF_INTEGERS << " ints, separated by spaces: ";
std::getline(std::cin, line);
// create a string stream of the line you entered
std::stringstream ss(line);
// create a container for storing the ints
std::vector<int> myInts;
// a temporary to extract ints from the string stream
int myInteger;
// extract at most MAX_NUMBERS_OF_INTEGERS ints from the string stream
// and store them in the container
while(myInts.size()<MAX_NUMBERS_OF_INTEGERS && ss>>myInteger) myInts.push_back(myInteger);
std::cout << "Extracted " << myInts.size() << " integer(s)\n";
// loop through the container and print all extracted ints.
for(int i : myInts) {
std::cout << i << "\n";
}
// ... or access a certain int by index
if(myInts.size() > 2)
std::cout << "The third int was: " << myInts[2] << "\n";
}
答案 1 :(得分:1)
final Categories_Data_holder listItem = listItems.get(position);
listItem.getCategories_id();
holder.biography.setText(listItem.getBio());
Picasso.with(context)
.load(listItem.getImageUrl())
.into(holder.imageView);
holder.biography.setText(listItem.getBio());
// Intent i = ((Cricket_Categorie)context).getIntent();
//Setting OnClickListner on Views:-
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent ii = null;
switch (position){
case 0:
ii = new Intent(v.getContext(), Activity.class);
break;
case 1:
ii = new Intent(v.getContext(), ActivityII.class);
break;
}
context.startActivity(ii);
}
});
}
我还没有测试过该解决方案,但是它应该从cin读取任意数量的int,直到您输入除整数以外的其他值。如果不需要保存结果,也可以跳过矢量部分中的保存。如果您想保存任意数量的整数,那么这很轻松。
编辑:澄清后,您的解决方案应如下所示:
std::vector<int> read_ints;
int _temp;
for(;;)
{
cin >>_temp;
if(!cin.good()) {
break;
}
else {
read_ints.push_back(_temp);
}
}
setw限制了输入字符的数量,但您必须包括iomanip标头
如果要访问每个数字,请使用以下功能将int转换为int的向量:
int MAX_CHARS = 10;
int my_int;
cin >> setw(MAX_CHARS) >> my_int;
然后您可以使用索引访问每个数字,例如第一位
vector <int> integerToArray(int x)
{
vector <int> resultArray;
while (true)
{
resultArray.insert(resultArray.begin(), x%10);
x /= 10;
if(x == 0)
return resultArray;
}
}
答案 2 :(得分:1)
从一行读取所有数字并将其限制为最大整数的一种方法是使用std :: getline()将行变成字符串,然后在循环中使用istringstream。
#include <iostream>
#include <sstream>
using namespace std;
int main() {
std::string line;
std::getline (std::cin,line);
std::istringstream iss(line);
int myInt;
for(int i=0;(iss >> myInt) && (i < MAX_NUMBER_OF_INTEGERS);++i ) {
std::cout << myInt << ' ';
}
return 0;
}
注意:我没有在代码中定义MAX_NUMBER_OF_INTEGERS
。我可以在使用前用const int MAX_NUMBERS_OF_INTEGERS = 10;
来定义它,或者可能是一个预处理器定义,甚至是一个命令行参数。我把这留给用户。