由于不允许使用向量,因此您需要先找出一行中有多少个数字,然后才能创建一个数组来保存它们。
我不会只给你完整的代码,因为这是家庭作业,但我会告诉你我会做些什么来解决你的问题。
如果您的行总是如下所示:“s number”或“s number number”或“s number number number”,那么您可以通过计算空格轻松找到行中数字的数量!
任何带有一个数字的字符串中都会有一个空格(在 s 和那个数字之间),第一个数字后面的每个数字还有一个空格。
那么让我们数一下空格吧!
int countSpaces(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
count++;
}
}
return count;
}
传递这些字符串:
string test1 = "s 123 4 99999";
string test2 = "s 1";
string test3 = "s 555 1337";
到countSpaces函数会给我们:
3
1
2
有了这些信息,我们可以创建一个大小正确的数组来保存每个值!
编辑
现在我意识到您无法从字符串中获取数字。
我会做的是使用上述方法查找行中的数字数量。然后,我将使用std::string.find() 函数来确定字符串中的位置以及是否有空格。
假设我们有这条线:s 123 45 678
countSpaces 会告诉我们我们有 3 个数字。
然后我们创建一个数组来保存我们的三个数字。我还会切断s 部分,这样您就不必再担心了。请注意,您可以使用std::stoi 将字符串转为数字!
现在我们可以在 find(' ') 不返回 -1 时循环。
在我们的循环中,我会将子字符串从 0 带到第一个空格,如下所示:
num = std::stoi( myLine.substr(0, myLine.find(' ') )
然后你就可以剪掉刚刚使用的部分了:
myLine = myLine.substr( myLine.find(' ') );
这会从你的字符串前面抓取一个数字,然后从字符串中剪掉那个数字,然后在字符串中还有空格的时候重复这个过程。
编辑:
如果您不能保证每个数字之间有一个空格,那么您可以在执行此方法之前删除多余的空格,或者您可以在 countSpaces 循环期间执行此操作。此时,调用countNums 之类的函数会更有意义。
删除空格并用一个空格替换它们的示例函数:
void removeExtraSpaces(string s) {
bool inSpaces = (s[0] == ' ');
for (int i = 1; i < s.size(); i++) {
if (s[i] == ' ') {
if(inSpaces) {
s.erase(i);
} else {
inSpaces = true;
}
} else if(inSpaces) {
inSpaces = false;
}
}
}