C ++来自键盘的多行输入

时间:2014-10-27 00:58:58

标签: c++ string input cin getline

对于我的作业,我们假设从键盘输入几行输入。例如:

请输入您的姓名:(这是静态的。总是1输入) 贾斯汀

请输入名称:(这可以是任意数量的输入,最小为1) 乔
鲍勃
约翰
杰克逊

最后,我想将开头输入的名称与之后输入的所有名称进行比较。我尝试使用getline和cin,但这似乎只有在我知道我希望输入的确切名称数量时才有效。任何人都可以指导我正确的方向。谢谢

2 个答案:

答案 0 :(得分:0)

试试这个

void read_lines( std::istream& in, std::list< std::string >& list ) {
    while( true ) {
        std::string line = "";
        std::getline( in, line );
        if( line != "" ) {
            list.push_back( line );
        } else {
            break;
        }
    }
}

答案 1 :(得分:0)

您应该添加一些粗略的代码,显示您在完成作业时所做的努力。 但是,我将为您提供一些初始的天真的代码(请阅读内部的评论!):

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    string name, temp;
    vector<string> names; // this is just one of the possible container that you can use
    bool result = false; // flag used to store the result of the matching operation (default: false)

    // first we ask the user to enter his/her name
    cout << "Please enter your name:" <<endl;
    cin >> name;

    // then we need something a little bit more complicated to look for variable number of names
    cout << "Please enter the names:" <<endl;
    while(cin)
    {
        cin >> temp;
        names.push_back(temp);
    }

    // This for-loop is used to go through all the input names for good-match with the user name
    for( int i = 0; i < names.size(); i++ )
    {
        temp = names.front();
        if (name == temp) result = true; // change the flag variable only in case of match
    }

    cout << "Valid match: " << (result?"yes":"no"); // ternary operator
}

您没有在问题中提供足够的详细信息..因此上述代码可能不完全符合您的要求!