在C ++中使用多个输入

时间:2015-05-24 14:16:09

标签: c++ arrays c++11

我刚开始学习C ++并且遇到了一个菜鸟问题。

假设我的输入由空格2 4 562 1 10 15hi bye ok分隔。 如何在数组中存储值,因为不知道输入的长度。

3 个答案:

答案 0 :(得分:1)

阅读int*。它可以增长到所需的大小。

答案 1 :(得分:1)

搜索空格并将每个空格中的字符串拆分为以下

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


vector<string> GetInputs(string s)
{
    vector<size_t> foundSpacesPositions;
    vector<string> results;
    for (size_t i = 0; i < s.length(); i++)
    {
        if (isspace(s[i]))
        {
            foundSpacesPositions.push_back(i);
        }
    }
    size_t start = 0;
    for (size_t i = 0; i < foundSpacesPositions.size(); i++)
    {
        if (foundSpacesPositions[i] == start)
        {
            ++start;
            continue;
        }
        results.push_back(s.substr(start, foundSpacesPositions[i] - start));
        start = foundSpacesPositions[i] + 1;
    }
    if (start < s.length() - 1)
        results.push_back(s.substr(start, s.length() - 1));
    return results;
}

int _tmain(int argc, _TCHAR* argv[])
{
    string s = "a dd 8 ll ehh fd $%^ &   89 . ";

    vector<string> results = GetInputs(s);
    for (auto& res : results)
    {
        cout << res << endl;
    }
    cin.get();
    return 0;
}
/* OUTPUT
a
dd
8
ll
ehh
fd
$%^
&
89
.
*/

答案 2 :(得分:1)

好吧,如果输入是以字符串形式给出的,那么您可以轻松使用std::istringstream。如果输入是在stdin中给出的,则可以使用std::cin流。 std::istream&#39; s operator<<将使用空格作为默认分隔符从字符串中获取整数。在您阅读了该流的所有输入后,std::istream operator bool将返回false,您可以停止阅读。

示例实现如下:

vector<int> getIntsFromString(const string& s) {
    istringstream ss(s);
    int i;
    vector<int> result;
    while (ss >> i) result.push_back(i);
    return move(result);
}

假设您从stdin获取具有可变数量整数的多行,并且您希望将它们存储在vector<int>中。你可以做类似的事情:

string buf;
while (getline(cin, buf)) {
    auto v = getIntsFromString(buf);
    for (auto i : v) cout << i << ' ';
    cout << endl;
}