go日常练习,不定期提供golang小项目作为练手。望客官笑纳的同时也提出宝贵意见,纯手工码字不易,您的支持就是我创作的最大动力。

对于每天手机不离手的我们来说,输入法太熟悉了,今天我们就用golang写一个简单的九宫格输入法,这里没有界面,只用了简单的控制台命令行输入。

一.题设

1.模拟手机九宫格输入,默认输入为数字,当输入#表示切换输入法,即数字与英文之间切换。

2.连续输入数字输出不变:例如输入222,输出也是222;但连续按同一个字母按键,输出的则是该按键上的英文字母索引,例如连续输入222,输出则是C。

3.默认输入“/”会结束,后面的内容也不再显示,同样输入特殊字符也不显示。

二.实战步骤

1.首先我们得了解到九宫格上的字母排列(如上图),这里根据字母顺序声明一个最简单的slice,跟高级的可以下一步完善。代码如下:

wordList := []string{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz”}

2.声明一个接收命令行输入的变量,并等待接收输入,这里用到了”fmt.Scanln”,这是go标准库fmt下的函数,一共有三个,分别是:fmt.Scan、fmt.Scanf、fmt.Scanln,具体用法可以参考go官方文档。

inputWords := ""
fmt.Scanln(&inputWords)

3.声明一个切换状态,这里用bool值表示,同时再声明输出变量,string类型

switchWords := true
outFrint := ""

4.准备工作做好以后,我们开始监控控制台输入,为了保持控制台一直等待输入,这里使用for循环一直等待的方式,直到控制台输入回车就结束。

for i := 0; i < len(inputWords); i++ {}

5.接下来我们先考虑跳出循环的条件,这里优先考虑,例如题干中的输入”/“就结束,看到结束我想大家知道该用什么词了吧。

if string(inputWords[i]) == "/" {break
}

6.开关控制,数字与英文之间的开关切换,注意这里要用到continue,因为输入“#”以后只是切换输入法,并没有实际操作,因此直接continue即可。

if string(inputWords[i]) == "#" {switchWords = !switchWordscontinue
}

7.接下来首先处理数字的输出,这是最简单的。这里用到“strconv.Atoi”函数,将输入的字符串转化成数字,当err不为nil时表示转换失败,那就表示输入的字符串不是数字,直接退出。

if switchWords {num, err := strconv.Atoi(string(inputWords[i]))
if err != nil { //非数字直接退出,这里做个异常处理continue
}outFrint += fmt.Sprintf("%d", num)
}

8.接下来该处理英文的输出,这里要注意的是连续按下某个数字,要输出这个数字上的应对应的英文字母,例如连续输入222,输出的是C;因此要对输入的内容进行遍历比较。

else {index, err := strconv.Atoi(string(inputWords[i]))if err != nil { //非数字直接退出continue}if index-2 < -1 { //异常提示,请输入0-9的数字index = 0} else if index-2 == -1 {outFrint += ","} else {haveSame := falsesameNum := 0for j := i + 1; j < len(inputWords); j++ {if string(inputWords[j]) == "#" {break}if inputWords[j] == inputWords[i] && inputWords[j-1] == inputWords[i] {haveSame = truesameNum++}}if haveSame {outFrint += fmt.Sprintf("%s", string(wordList[index-2][sameNum%3]))i += sameNumcontinue} else {outFrint += fmt.Sprintf("%s", string(wordList[index-2][0]))}}}

9.输出字符串

fmt.Println("out:", outFrint)

10.最后附上完整代码,一共67行,大家可以复制到自己的IDE里,然后命名为main.go,然后运行即可:go run main.go;然后再控制台输入数字或者字符即可实现九宫格功能。

package mainimport ("fmt""strconv"
)func main() {inputWords := ""switchWords := trueoutFrint := ""wordList := []string{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}fmt.Scanln(&inputWords)for i := 0; i < len(inputWords); i++ {if string(inputWords[i]) == "/" {break}if string(inputWords[i]) == "#" {switchWords = !switchWordscontinue}if switchWords {num, err := strconv.Atoi(string(inputWords[i]))if err != nil { //非数字直接退出continue}outFrint += fmt.Sprintf("%d", num)} else {index, err := strconv.Atoi(string(inputWords[i]))if err != nil { //非数字直接退出continue}if index-2 < -1 { //异常提示,请输入0-9的数字index = 0} else if index-2 == -1 {outFrint += ","} else {haveSame := falsesameNum := 0for j := i + 1; j < len(inputWords); j++ {if string(inputWords[j]) == "#" {break}if inputWords[j] == inputWords[i] && inputWords[j-1] == inputWords[i] {haveSame = truesameNum++}}if haveSame {outFrint += fmt.Sprintf("%s", string(wordList[index-2][sameNum%3]))i += sameNumcontinue} else {outFrint += fmt.Sprintf("%s", string(wordList[index-2][0]))}}}}fmt.Println("out:", outFrint)
}

ps:如果代码无法运行,请私信本人,本人拷给你一份详细代码。其实合理还有一种情况:输入1的时候的显示,这个时候应该显示小数点或者"@",这里留给大家去添加。

67行代码实现:模拟手机九宫格输入法相关推荐

  1. 不到100行代码 Python制作一个九宫格图片生成器,炫酷朋友圈!

    朋友圈下面的这种图片排列风格,相比大家一定会很熟悉,有关于职位招聘的 祝贺节日的, 筛自己美照的, 这种因为图片刚好为 3*3 的排列方式,所以被称为 9 宫格图片风格,图片的生成原理就是把一张图片按 ...

  2. 用python编写图片生成器_不到100行代码 Python制作一个九宫格图片生成器,炫酷朋友圈!...

    朋友圈下面的这种图片排列风格,相比大家一定会很熟悉,有关于职位招聘的 Snipaste_2020-08-02_19-48-58.png 祝贺节日的, Snipaste_2020-08-02_19-49 ...

  3. 实验课题——最全手机通信录实现版本(【含注释】848行代码)!!!(包括模糊查询、分类查找、模拟拨号、qsort函数实现排序、文件存储、防误触等功能)

    目录 简介: 基本要求: 代码的实现: 1.Contact.h 2.test.c 3.Cantact.c 运行效果图: 部分复杂函数流程图 前两周是本人的实验周,抽到的课题是"手机通信录的实 ...

  4. android 9宫格输入法,Android/WP原生九宫格输入法对比_诺基亚 Lumia 925_手机iOS频道-中关村在线...

    那么其他系统手机的原生自带九宫格输入法如何呢?我们也对这一输入法进行了测试.Android原生九宫格输入法为谷歌拼音输入法,我们采用的测试机器为小米手机2S.Windows Phone 8系统原生九宫 ...

  5. 黑进iPhone让手机崩溃重启,只需15行代码:iOS漏洞你可知?

    黑栗子 发自 麦蒿寺 量子位 出品 | 公众号 QbitAI 有人找到了iOS系统的弱点. TechCrunch报道,一个名叫Sabri Haddouche的网络安全研究人员发推特说,只要15行CSS ...

  6. html实现安卓手机重启,这12行代码分分钟让你电脑崩溃手机重启

    事情的起因是这样的,国外一哥们Cyber Security在推特上发了这么一条推文: 高能!这12行代码分分钟让你的电脑崩溃手机重启 神秘的12行代码 这哥们声称,如果你使用上述这段12行的JavaS ...

  7. html崩溃手机代码15,这12行代码分分钟让你电脑崩溃手机重启

    事情的起因是这样的,国外一哥们Cyber Security在推特上发了这么一条推文: 神秘的12行代码(图片来自0xroot) 这哥们声称,如果你使用上述这段12行的JavaScript代码,就可以能 ...

  8. Python3,20行代码,通过微信电脑版爬取朋友圈数据,老板再也抓不到我上班看手机了!!!

    爬取微信电脑版朋友圈数据 1.引言 2.桌面图形界面工具介绍 2.1 PyAutoGUI 2.2 PyWinAuto 3.代码实战 1.引言 小屌丝:鱼哥,忙吗?? 小鱼:忙!! 小屌丝:想问你件事. ...

  9. 作死的神秘12行代码:分分钟让你电脑崩溃手机重启

    查看原文:http://www.ibloger.net/article/313.html 最近,一段神秘的12行代码在国外社交网络上火了起来,据说能让你的浏览器瞬间崩溃,iPhone秒重启.到底是什么 ...

最新文章

  1. 拜托别在问我 MySQL 性能优化了!
  2. Android核心基础第八天
  3. Win8Beta即将发布,业内普遍看好微软Windows 8
  4. js组合模式和寄生组合模式的区别研究
  5. pbr 多出口_结合BFD基于PBR的多出口流量转发的控制与备份
  6. 最大似然估计_状态估计的基本概念(2)最大似然估计和最大后验估计
  7. Idea 同一工程根据不同配置文件启动、idea 同一工程多实例同时运行
  8. HDU 5281 Senior's Gun (贪心)
  9. 菜鸟学习笔记:Java基础篇4(面向对象三大特征)
  10. Lua IDE工具-Intellij IDEA+lua插件配置教程(Chianr出品)
  11. 8.大数据架构详解:从数据获取到深度学习 --- 机器学习和数据挖掘
  12. Spring Boot REST 请求(GetMapping,PostMapping)、格式化日期参数、压缩响应内容
  13. 程序员!你还能年轻几岁?
  14. wmp搭建PHP,教你如何使用WIN7自带的WMP实现媒体共享
  15. C++(11):显示删除函数=delete
  16. 网络调试助手连接远程服务器
  17. 旅游流的概念_国内旅游流综述
  18. Spring Cloud 入门教程(二): 配置管理
  19. 微信解封百度春晚红包
  20. HTML——HTML 简介

热门文章

  1. StrutsPrepareAndExecuteFilter 与 FilterDispatcher的区别
  2. 【数字电子钟】基于maxplusII的数字电子钟设计
  3. 英语发音规则---oo
  4. XGBoost学习(五):参数调优
  5. 如何通过售后报修工单系统解决企业售后难题?
  6. 大力哥谈 DALI - DALI 设备 GTIN / 序列号
  7. 电子邮件营销技巧之主题设计
  8. Linux Shell脚本操作学习指南
  9. 计算机组成原理之指令周期
  10. 排列组合问题Java实现