C++笔试输入输出的某些问题

多行不定个数 字符串输入

输入:

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值