解析文本

题目描述

有一种表格数据需要存储在文件中,表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串,设计一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下:
1、采用逗号分隔不同的字段(逗号前后无空格);
2、数字直接采用10进制的文本存储;
3、字符串的存储规则如下:
1)如果字符串中包含逗号以及双引号,则字符串必须在头尾各增加一个双引号,且中间的双引号用连续两个双引号表示。例如“a“”b”表示字符串a“b。
2) 如果字符串中未包含逗号及双引号,则字符串不强制要求在头尾增加双引号,可直接存储。例如abc,或者”abc“都可以。
4、空字符串不存储任何字符,例如a,b中,有3个字段,分别是:a,空字符,b。空字符输出–。

输入单行文本,解析为多个字段

解题思路

通过逗号将输入的字符串分割为多个子串存入str_list。从第一个子串开始,判断其是否符合字段的规则。若符合规则,则将该子串append至res_list。若不符合规则,则将分割掉的逗号和后一个子串拼接至当前子串,再次判断其是否符合规则,直至str_list为空。若当前依然不合规则,则输出error。

python代码

def is_legal(str_): #判断字符串是否符合规则if '"' not in str_ and ',' not in str_:return Trueif ',' in str_ and '"' not in str_:return Falseif '"' in str_:if len(str_) == 1:return Falseif str_[0] is not '"' or str_[-1] is not '"':return Falseif '"' not in str_[1:-1]:return Truesub_str = list(str_[1:-1])while sub_str:char = sub_str.pop(0)if char is '"':if not sub_str:return Falseif sub_str.pop(0) is not '"':return Falsereturn Truedef cut_str(str_):#输出解析后的字段#输出:#        judge:字符串是否合法,非法则等于error#     res_list:解析后的字段str_list = str_.split(",")judge = ''res_list = []while str_list:   #循环判断子串是否合法f_str = str_list.pop(0) #取出最前端的子串if is_legal(f_str):    #符合规则,存入res_listres_list.append(f_str)else:  #不符合规则while str_list:   #循环拼接子串f_str += ',' #拼接逗号f_str += str_list.pop(0) #拼接后一个子串if is_legal(f_str): #符合规则,存入res_listres_list.append(f_str)break;if not is_legal(f_str):      #str_list为空,但子串依然不符合规则,则judge为error           judge = 'ERROR'return judge, res_listreturn judge, res_listif __name__ == '__main__':test_str = 'a,,1,"b,"""'judge, res_list = cut_str(test_str)if judge is 'ERROR':print(judge)else:print(len(res_list))for str_ in res_list:if str_:if str_[0] is '"' and str_[-1] is '"': #若字符串带双引号,将中间存在的两个双引号替换为单个双引号print(str_[1:-1].replace('""', '"'))else:print(str_)else:print('--')

后记

通过率90%,仅做参考。

2019华为机试题 解析文本相关推荐

  1. 华为机试题解析012:字符串反转(python)

    字符串反转 1. 题目描述 2. 解析过程 2.1 使用循环遍历将字符串反转 2.2 使用内置reversed()函数将字符串反转 2.3 使用切片将字符串反转 2.3.1 切片的概念 2.3.2 实 ...

  2. 牛客网华为机试题(JavaScript)

    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...

  3. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  4. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法

    关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...

  5. 【牛客网】华为机试题(00、C++版本)

    华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...

  6. 【牛客网-华为机试题目录】持续更新中

    文章目录 博主精品专栏导航 华为机试题:HJ80 整型数组合并(python) 华为机试题:HJ76 尼科彻斯定理(python) 华为机试题:HJ73 计算日期到天数转换(python) 华为机试题 ...

  7. 华为机试题库+题解【C语言版】

    文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...

  8. 【华为机试题分析-C/C++】知识点分类总结

    专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...

  9. 【华为机试题分析】 4 字符串分割

    我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...

最新文章

  1. php gd库画线,[PHP] GD库(十)绘制线段与圆弧 imageline、imagesetstyle 与 imagearc 函数...
  2. VS2003编译后的网站如何修改代码
  3. pandas python2.3版本_python-像以前的版本一样,将pandas 0.13.0“ pri...
  4. 50个经典jquery实例_【电气知识】从原理图到程序的4个经典实例详解
  5. 编码基本功:性能测试工具可用于检查死循环
  6. 极化码理论及算法研究3-Arikan原版论文学习总结
  7. 【第三方互联】2、创建腾讯QQ互联应用
  8. Centos 7 磁盘分区
  9. linux上压缩pdf文件,如何压缩PDF文件?
  10. SpringBoot快速整合Quartz动态管理定时任务
  11. Error:scalac: Scala compiler JARs not found
  12. 【单片机笔记】基于LM358的差分放大,电流检测电路
  13. 计算机领域nt=p,计算机考试范题-pwerpoint操作.doc
  14. 异步协议与同步协议:面向字符的协议BSC协议
  15. AJAX实验(添加+模糊查询 图书)
  16. 你喜欢的搞笑内容都在这里-----笑口常开
  17. 介绍计算机的英语作文,总算晓得写一篇介绍电脑的英语作文
  18. 针对firefox的恶意软件分析取证
  19. BIM、GIS、CIM等技术共同助力数字孪生城市的建设
  20. Android Studio - Bumblebee | 2021.1.1 Patch 3

热门文章

  1. Python源代码保密、加密、混淆
  2. 我的职业理想之计算机类1000,我的职业理想
  3. 欢迎使用CSDN-markdown编辑器 fdsdf
  4. 单片机——led扩展交通灯(proteus8.9和KeilC51)
  5. 如何用Tableau绘制涂色地图
  6. ddd linux 调试工具_Centos安装DDD调试器
  7. Hex文件转Bin文件
  8. VMware Workstation 不可恢复错误: (vcpu-0) c.382
  9. 2017年的奋斗目标
  10. CenterOS下安装docker