我刚开始学习C ++并且遇到了一个菜鸟问题。
假设我的输入由空格2 4 56
或2 1 10 15
或hi bye ok
分隔。
如何在数组中存储值,因为不知道输入的长度。
答案 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;
}