多行不定个数 字符串输入
输入:
5
asd asd asd asd
asda
asdas asd asd asd asd
asd asd
asd asd asd
//第一行表示输入的行数
//每一行输入多个字符串(不定长),用空格分隔
输出
asdas asd asd asd asd
定义一个二维vecotor,外层表示行数,内层表示字符串在该行的第几个位置
代码
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<n<<endl;
string s;
vector<string> ss;
vector<vector<string>> sss;
cin.ignore(); //忽略掉之前cin的东西,否则后面的getline会读取前面的内容
//获取n行输入,每一行包含多个字符串,将每一行作为一个长字符串存到一维vector
for(int i=0; i<n;i++){
getline(cin,s);
cout<<s<<endl;
ss.push_back(s);
}
//对每一行字符串按照空格进行分割
for(int i=0;i<ss.size();i++){
string stemp;
vector<string> sstemp;
stringstream str(ss[i]);
while(str>>stemp){
sstemp.push_back(stemp);
}
cout<<endl;
sss.push_back(sstemp);
sstemp.clear();
}
for(auto x:sss[2]) cout<<x<<' ';cout<<endl;
return 0;
}
第二种实现
vector<vector<string>> str;
vector<string> ss
string s;
int i=0;
while(cin>>s){
ss.push_back(ss);
if(getchar()=='\n'){
str.push_back(ss);
ss.clear();
}
}
cin>>s会捕获空格和换行符, getline只捕获换行符
多行不定个数 数字输入
输入
3
1231 1231
2321 2311
1231 123 1231
输出
3
1231 1231 1231
代码
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<n<<endl;
vector<vector<int>> vals;
cin.ignore();
for(int i=0; i<n; i++){
int num;
vector<int> val;
string ss;
string s;
getline(cin,s);
stringstream split(s);//用于以空格分割字符串
stringstream toint;//将字符串转化为int
while(split>>s){
toint<<s;
toint>>num;
val.push_back(num);
}
vals.push_back(val);
}
for(auto& x:vals[2]) cout<<x<<' '; cout<<endl;
return 0;
}
多行无空格分割 数字输入
输入
3
1231
234567
985132
输出
3
1 2 3 1
2 3 4 5 6 7
9 8 5 1 3 2
代码
#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<n<<endl;
vector<vector<int>> vals;
cin.ignore();
for(int i=0; i<n; i++){
vector<int> val;
string s;
getline(cin, s);
for(int i=0;i<s.size();i++){
int tmp = s[i]-'0';
val.push_back(tmp);
}
vals.push_back(val);
}
for(int i=0; i<n; i++){
for(auto& x:vals[i]) cout<<x<<' '; cout<<endl;
}
return 0;
}