0

我目前有一个函数,它接受一个由 4 个字符组成的数组,并根据该字符序列返回另一个值。

我想要的是让用户输入一整行字符,然后创建一个循环来遍历每个“字符子组”,然后返回所有字符的结果。

我最初的想法是以某种方式使用 push_back 继续将数组添加到向量中。

我不知道整个数组会有多长,但它应该是 3 的乘积。

例如,现在我可以做到:

char input [4] ;
cin >> input;  

int i = name_index[name_number(input)];
cout << name[i].fullName;

但我想要的是用户一次输入多个名称缩写

4

2 回答 2

2

我会从这个改变你的样本:

char input [4] ;
cin >> input;  

int i = name_index[name_number(input)];
cout << name[i].fullName;

对此:

string input;
cin >> input;  

const int i = name_index[name_number(input)];
cout << name[i].fullName;

然后您可以开始使用向量来跟踪多个输入:

vector<string> inputs;
string line;
while (cin >> line)
{
    if (line == "done")
        break;
    inputs.push_back(line);
}

for (unsigned int i = 0; i < inputs.size(); ++i)
{
    cout << "inputs[" << i << "]: " << inputs[i] << endl;
    //const int index = name_index[name_number(inputs[i])];
    //cout << name[index].fullName;
}

你要求解释line。该行while (cin >> line)尝试从标准输入中获取文本并将其放入line. 默认情况下,它会在遇到空格(空格、制表符、回车等)时停止。如果成功,则while执行循环体并将输入的内容添加到vector. 如果不是,那么我们假设我们在输入结束并停止。然后我们可以处理vector. (在下面链接的代码中,我只是输出它,因为我不知道是name_index什么name_number

工作代码在这里

于 2013-07-31T17:48:22.243 回答
-1

cin 的工作方式是接受任意数量的输入并用空格分隔它们,当您要求特定输入时,它会提示用户输入,然后只接受第一个字符串(直到空格)。如果在那之后还有任何输入,另一个cin >> input只会检索该值而不会再次提示用户。当只剩下一个换行符时,您可以判断何时到达输入的实际结尾。此代码应允许您输入多个用空格分隔的字符串,然后在用户输入文本后一次处理它们:

char input[4];
do // Start our loop here.
{
    // Our very first time entering here, it will prompt the user for input.
    // Here the user can enter multiple 4 character strings separated by spaces.

    // On each loop after the first, it will pull the next set of 4 characters that
    // are still remaining from our last input and use it without prompting the user
    // again for more input.

    // Once we run out of input, calling this again will prompt the user for more
    // input again. To prevent this, at the end of this loop we bail out if we
    // have come accros the end of our input stream.
    cin >> input;

    // input will be filled with each 4 character string each time we get here.
    int i = name_index[name_number(input)];
    cout << name[i].fullName;
} while (cin.peek() != '\n'); // We infinitely loop until we reach the newline character.

编辑:另外,请记住,仅分配 4 个字符input并不能说明将在末尾添加的字符串字符'\0'的结尾。如果用户输入 4 个字符,那么它在将字符串分配给您的input. 有 4 个字符 + 1 个结束字符,这意味着您至少需要为input. 最好的方法是使用std::string它,因为即使用户输入超过 4 个字符,它也会正确调整大小。

于 2013-07-31T18:53:37.507 回答