解决C++ 遇笔试题输入[[1,2,3,...,],[5,6,...,],...,[3,1,2,...,]]问题

目录

  • [0 引言](#0 引言)
  • [1 思路](#1 思路)
  • [2 测试结果](#2 测试结果)
  • [3 完整代码](#3 完整代码)
  • [4 总结](#4 总结)

0 引言

现在面临找工作问题,做了几场笔试,遇到了一个比较棘手的题目就是题目输入形式如下:

\[3,1,1\], \[3,5,3\], \[3,2,1\]

当时遇到这个问题还是比较慌的,主要是之前没有遇到这样的输入可能是太菜没刷的题目少了,在这里记录一下自己解决此类问题的方法,还有一个目的就是集思广益,看看还有没有其他解法我想学习学习。

1 思路

以下为我个人解题思路,仅供参考,希望有大佬能在评论区给出你的妙招,无论什么编程语言都可以,主打一个一起学习!!!

  • 首先:通过getline(cin,s)直接整行获取输入并存入字符串string s中,将获得的字符s中[[,[变为 ' ' (空字符)]]变为] ,以上述为例:处理后结果为

3,1,1] 3,5,3] 3,2,1]

  • 接着:使用stringstream ss(s)将字符串流分割字符串并存入数组,再使用getline(ss, token, ']')意思就是遇到]就将前面字符存入token中,并且需要循环存放到token中,接着上步结果处理得到

3,1,1

3,5,3

3,2,1

  • 最后:使用一维vector存放行矩阵,用二维vector存放多行矩阵即可

话不多说直接上写好的函数代码:

cpp 复制代码
vector<vector<int>> vcenums(string input) {
    vector<vector<int>> array;
    // 第一步:
    for(int i = 0; i < input.size()-1; i++){
        if((input[i+1] == '[' && input[i] == '[') || (input[i+1] == '[' && input[i] == ',')){
            input[i] = ' ';
            input[i+1] = ' ';
        }else if(input[i+1] == ']' && input[i] == ']'){
            input[i+1] = ' ';
        }
    }
    input.erase(remove(input.begin(), input.end(), ' '), input.end());
    // cout << input << endl;           // 可以取消注释处理结果
    // 将获取的数据存放到vector中
    stringstream ss(input);
    string token;
    while (getline(ss, token, ']')) {
        // cout << token << endl;
        vector<int> row;
        stringstream row_ss(token);
        string element;
        while (getline(row_ss, element, ',')) {
            row.push_back(stoi(element));
        }
        array.push_back(row);
    }
    return array;
}

2 测试结果

测试用例输入:[[2,3,5,8,10],[11,2,1,5,4],[1,2,7,4,5],[6,9,0,1,4]]

3 完整代码

以下为完整代码仅供参考,如若有错欢迎提出,我及时更正

cpp 复制代码
#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;

vector<vector<int>> vcenums(string input) {
    vector<vector<int>> array;
    for(int i = 0; i < input.size()-1; i++){
        if((input[i+1] == '[' && input[i] == '[') || (input[i+1] == '[' && input[i] == ',')){
            input[i] = ' ';
            input[i+1] = ' ';
        }else if(input[i+1] == ']' && input[i] == ']'){
            input[i+1] = ' ';
        }
    }
    input.erase(remove(input.begin(), input.end(), ' '), input.end());
    cout << input << endl;
    // 使用字符串流分割字符串并存入数组
    stringstream ss(input);
    string token;
    while (getline(ss, token, ']')) {
        cout << token << endl;
        vector<int> row;
        stringstream row_ss(token);
        string element;
        while (getline(row_ss, element, ',')) {
            row.push_back(stoi(element));
        }
        array.push_back(row);
    }
    return array;
}



int main() {
    string s;
    vector<vector <int>> M;
    while(getline(cin,s)){
        M = vcenums(s);
        // 打印矩阵
        for(auto nums : M){
            for(auto i : nums){
                cout << i << " ";
            }
            cout << endl;
        }
    }
    return 0;
}

4 总结

其实可能有些笔试题不是很难,难在输入如何处理,不知道如何处理从而导致消耗了大量做其他题目时间,所以遇到困难的输入还是需要锻炼自己用代码记录一下并突破自己,下次遇到同样的输入情况就不会消耗大量时间。算是一种积累,以后可能会整个专栏存放一些不常见得输入。

这道笔试的题目题目描述是从矩阵的左上角寻找最优路径到达矩阵右下角(动态规划题)

这道题本身不难,就是有些时候真不知道处理输入会浪费大量时间,通过上面得处理就可以得到二维矩阵,然后就利用动态规划求出最短路径。

相关推荐
JienDa1 分钟前
JienDa聊PHP:起卦、卜卦平台实战中PHP框架的协同架构方略
开发语言·架构·php
Le1Yu2 分钟前
订单优化(状态机、分库分表、覆盖索引、缓存优化查询)
java·开发语言·数据库
豆豆plus6 分钟前
C++实现文件操作类
开发语言·c++
j***294812 分钟前
对基因列表中批量的基因进行GO和KEGG注释
开发语言·数据库·golang
墨雪不会编程15 分钟前
C++基础语法篇五 ——类和对象
java·前端·c++
寻找华年的锦瑟17 分钟前
Qt-视频九宫格布局
开发语言·qt
f***R817 分钟前
go测试问题记录
开发语言·后端·golang
sunshine64126 分钟前
JS实现悬浮可拖拽vue组件封装
开发语言·前端·javascript
v***446735 分钟前
PLC(电力载波通信)网络机制介绍
开发语言·网络·php
JienDa44 分钟前
JienDa聊PHP:盲盒电商实战中主流PHP框架的协同架构方略
开发语言·架构·php