如何分隔用户输入的字符串并将其存储到数组中

时间:2013-09-18 19:59:35

标签: c++ arrays string

我想知道你是否可以帮助我并在不使用strtok之类的情况下解决这个问题。这个赋值对我来说是构建一些接受输入并将用户引导到正确区域的东西。我希望得到类似......

  

帮助复制

并将其存储为

  

array [1] =帮助
  array [2] =复制。

我尝试做过像cin>> arr [1];和cin>> arr [2]但同时如果用户输入副本然后我不知道如何做,如果我只放一个cin然后如果用户放置帮助副本。

基本上我不确定如何接受任何大小的输入并将它们作为元素存入的任何内容存储在数组中。

我会尝试类似cin.get或getline的东西,但他们似乎并没有真正帮助我,而我的cin想法根本没有帮助。

这是我到目前为止所做的。

int main()
{
    string user;

    cout<<"Hello there, what is your desired username?"<<endl;

    cin >> user;

    system("cls");

    cout<<"Hello, " << user << "! How are you doing?"<<endl<<endl;

    cout<< user << ": ";



    return 0;
}

2 个答案:

答案 0 :(得分:2)

std::vector<std::string> myInputs;

std::cout << "Enter parameters:  ";
std::copy(std::istream_iterator<std::string>(std::cin), std::isteram_iterator<std::string>(), std::back_inserter(myInputs));

// do something with the values in myInputs

如果用户在每个输入之间按Enter,则直到它们停止输入(Windows上的Crtl-D)。如果您希望它们将所有参数放在一行上,您可以将输入读入单个字符串,然后按空格(或您希望使用的任何分隔符)拆分字符串。

答案 1 :(得分:2)

你可以这样做:

  • 使用getline
  • 阅读整行
  • 从该行创建输入字符串流
  • 将该字符串流的内容读入vector<string>。它将自动增长以容纳用户输入的
  • 数量的输入
  • 检查结果向量的大小以查看最终用户创建的条目数

以下是如何在代码中执行此操作:

// Prepare the buffer for the line the user enters
string buf;
// This buffer will grow automatically to accommodate the entire line
getline(cin, buf);
// Make a string-based stream from the line entered by the user
istringstream iss(buf);
// Prepare a vector of strings to split the input
vector<string> vs;
// We could use a loop, but using an iterator is more idiomatic to C++
istream_iterator<string> iit(iss);
// back_inserter will add the items one by one to the vector vs
copy(iit, istream_iterator<string>(), back_inserter(vs));

这是demo on ideone