输入输出总结

做大厂编程题解决的第一个问题就是输入,华为的题输入还是挺人性化,不会太难,大疆的输入偏难一点

本人因工作原因一直用c语言,现在专用C++后一直存在一个问题,数组究竟用c那种的char a[];int b[][] 还是用容器string,vector,使用C++后众多实例告诉我,最好用容器(前提下你要对容器的操作函数很数据,其实用多就熟了,而且很方便),C++不用容器,模板类那和C有什么区别...

输入数据的时候cin 默认有空格,或者换行就认为一个输入结束了!

1.字符串的输入

常规的输入的输入

int main()
{
    string str;
    while(cin>>str){   //对应的是输入wffsdfsdf 中间没有空格的字符串
    }
    while(getline(cin,str)) //获取整一行的数据 sfwe fwefew sfsefew gtrger 4567 就算有空格都会输进去,所以使用后一般后面还要继续截取数据
    {
    }
}

字符串中间需要截取数据如:
123,485,486,856
A1;B52;C4896;SFEQ
看到这种输入真的会让人头痛

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    string str;
    while(cin>>str){
        int len=0;   //用来获取截取的长度
        vector<string> vec;
        for(int i=0;i<str.size();i++){
            while(str[i]!=';'&&str[i]!='\0'){    //获取非;的一连串字符
                len++;
                i++;            //这里记得移动i
            }
            vec.push_back(str.substr(i-len,len));//使用了substr函数截取想要的数据
            len=0;            //截取长度归零
        }
        for(auto &c:vec){
            cout<<c<<endl;
        }
    }
    return 0;
}   

图片说明
2.数组的输入
先说矩阵的输入,如果是以前的我会直接用int a[][],现在用C++,一开始嫌麻烦,后面真香系列

//如走迷宫要输入以下矩阵,像华为的题一般会告诉你多少行n,多少列m的数据
4 8 4 6
7 8 1 1
5 7 8 9
7 8 9 1

int main(){
    int n,m;   //行列
    while(cin>>n>>m){
        vector<vector<int> > vec(n,vector<int>(m,0));  //很长对吧,刚开始都忘记怎么定义
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cin>>vec[i][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cout<<vec[i][j]<<' ';
            }
            cout<<endl;
        }
    }
    return 0;
}   

图片说明
常规的数输入

//题目如果告诉你有多少个数需要输入n,在利用for循环输入就行
4
123
756
456
487
int main(){
    int n;   //一次测试用例输入多少个数
    while(cin>>n){
        vector<int> vec(n,0);//两种输入方式,这种比较简洁,前提是定义的时候要提早写长度是多少
        for(auto &c:vec){
            cin>>c;
        }

     /*   vector<int> vec;    //这种需要个中间变量输入,数据添加到最后就行
        for(int i=0;i<n;i++){
            int temp;
            cin>>temp;
            vec.push_back(temp);  */
        }
    }
    return 0;
}   

图片说明
(未完,待续)

全部评论
你好,第一个程序的第12行:这个while(str[i]!=';')语句里是不是得改成while(str[i]!=';'&&str[i]!='\0')。要不然最后一个单词捕捉不到。
1 回复 分享
发布于 2020-09-06 09:17
终于等到你的评论,你的逻辑是对的,为什么我之前的代码可以在跑的时候还能获取到最后一个单词我得再查下
1 回复 分享
发布于 2020-09-06 10:19
hello!我又来了,我觉得在数组输入的部分用迭代器来实现可能会好一点,因为这样效率会更高一点,对于那些要求时间比较短的的编程题会有用一些。下面是我替换的代码:
点赞 回复 分享
发布于 2020-09-07 20:45
for (auto it = vec.begin(); it < vec.end(); it++) { for (auto its = (*it).begin(); its < (*it).end(); its++) cin >> (*its); } cout << endl; for (auto it = vec.begin(); it < vec.end(); it++) { for (auto its = (*it).begin(); its < (*it).end(); its++) cout << (*its)<<" "; cout << endl; }
点赞 回复 分享
发布于 2020-09-07 20:45

相关推荐

没有offer的小土豆:专业面试一般是分配面试官然后联系你面试 应该是还没给你分配对应面试官
点赞 评论 收藏
分享
评论
2
2
分享
牛客网
牛客企业服务