这是我现在的C ++代码:
// Prompt user loop
char preInput;
do {
// Fill the vector with inputs
vector<int> userInputs;
cout << "Input a set of digits: " << endl;
while(cin>>preInput){
if(preInput == 'Q' || preInput == 'q') break;
int input = (int) preInput - '0';
userInputs.push_back(input);
}
// array of sums sync'd with line #
int sums[10] = {0};
// Calculate sums of occurance
for(vector<int>::iterator i = userInputs.begin(); i != userInputs.end(); i++){
int currInput = *i;
for(int numLine = 0; numLine < lines.size(); numLine++){
sums[numLine] += lineOccurances[numLine][currInput];
}
}
int lineWithMax = 0;
for(int i = 0; i < 10; i ++)
if(sums[i] > sums[lineWithMax]) lineWithMax = i;
cout << lines[lineWithMax] << endl;
// Clear vector
userInputs.clear();
} while (preInput != 'Q' && preInput != 'q')
不要担心循环的功能,我只需要它以某种方式运行。 如果用户键入“123”,则循环应将字符1,2,3作为单独的元素加载到userInputs中。 点击进入后,循环需要执行while(cin&gt;&gt;&gt; preInput){}语句下面的所有代码,清除userInput向量,然后重复直到输入字符Q.这不是正在发生的事情。循环当前写入的方式,程序接受用户输入,直到用户点击Q,输入基本上什么都不做。我需要在用户点击进入时执行代码。我已经玩了一段时间,但我不太熟悉通过cin将数据通过char转换为矢量,所以我不知道如何做到这一点......有人能指出我正确的方向吗?
将cin&gt;&gt; preInput更改为getline工作?或者这会尝试将值“... 123”作为一个赋值放入char preInput?我需要向量分别接收数字而不是一起作为一个元素。重申一下,如果用户输入“123”,则userInputs [0]应为1,userInputs [1]应为2 ...依此类推。
基本上,唯一需要改变的是当用户点击进入时,while(cin&gt;&gt;&gt; preInput){}循环必须中断。
答案 0 :(得分:1)
使用getline
读取一行,然后使用istringstream
将该行拆分。
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
while(iss>>preInput){
if(preInput == 'Q' || preInput == 'q') break;
int input = (int) preInput - '0';
userInputs.push_back(input);
}
或者,既然你一次只看一个角色,你可以直接查看字符串的字符。
for (char c : line)
{
if (c == 'Q' || c == 'q') break;
int input = c - '0';
userInputs.push_back(input);
}