解决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 总结

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

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

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

相关推荐
mazo_command2 小时前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
IT猿手2 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大2 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师2 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on2 小时前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit2 小时前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
一个没有本领的人3 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡3 小时前
C项目 天天酷跑(下篇)
c语言·开发语言
源码哥_博纳软云3 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
沐泽Mu3 小时前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习