有时候会遇到输入不确定行数字,每行输入不确定个数的情况;
发现这是个什么需求?不会呀T_T
查了半天也没有令人满意的,无意间发现可以用字符串来处理,茅塞顿开;
不废话,直接上代码:
#include <iostream>
#include <vector>
using namespace std;
int main(){
string str;
char ch;
vector<vector<int>> num;//定义二维数组,存放输入的 不定长 不定行 输入
while(true){
getline(cin,str);//获取一行字符串
vector<int> numTemp;//定义一维(临时)数组,存放当前行的输入(数字)
int i=0;
int len = str.size();
while(i<len){
while(i<len && !('0' <= str[i] && str[i] <= '9'))//去掉非数字的部分
i++;
int number=0;
while(i<len && '0' <= str[i] && str[i] <= '9')//计算数字(以空格或其他字符作为分割)
number = number*10 + str[i++] - '0';
numTemp.push_back(number);//当前数字存入 临时数组
//去掉 字符串末尾的 非数字部分,如果没有的话:
//输入字符串末尾如果有非数字,则会在最后push_back一个0!!
while(i<len && !('0' <= str[i] && str[i] <= '9'))
i++;
}
if(len == 0)//如果某一行输入没有内容,即字符串长度为0,break
break;
num.push_back(numTemp);//将当前行存入二维数组中
}
cout<<"输入的内容是:"<<endl;
for(int i=0;i<num.size();i++){//打印结果
for(int j=0;j<num[i].size();j++)//因为每一行长度不一样,所以需要每一行获取一次长度
cout<<num[i][j]<<' ';
cout<<endl;
}
return 0;
}
最后一行输入结束后,直接回车即可退出输入胡状态。
结果如下,本代码不仅用于每行的数字用空格分割的情况,还适用于数字用任何“非数字”分割的情况,输入输出示例如下: