题目
这是来自 codewars 的一道算法题,题目是这样的:
Write a function that accepts an array of 10 integers (between 0 and 9), that returns a string of those numbers in the form of a phone number.
例如输入:
|
|
返回:
|
|
个人解答
拿到这道题我首先想到的是一个一个把这些 int 数字转换成 string 拼接在一起,并在需要的地方拼接需要的额外字符。这样用几个 +=
和 for
循环应该是能做到,只需要知道如何进行格式转换即可。
因而我做出这样的东西:
|
|
只能说也不是不能用吧,就是太冗杂了。在提交之后看到了好多解答都比我这个要简单得许多
他人解答
一
好评最多的老哥用的居然是古老的 c 方案,但是在 c++ 上也不是不行,哈哈哈哈。
他使用 snprintf()
函数,snprintf()
的结构如下:
|
|
输入的需要是 char
类型,c 语言可没有 string 类啊。
snprintf()
的形参第一个是 char*
类型的指针,指向一个字符串,也就是要输入进去的变量。
第二个是最大的长度。可以使用 sizeof(s)
直接使用 s 字符串的大小
第三是格式和printf()
里面差不多。给 “%d"之类的。
后面...
,就是输入进去的参数,将这些参数丢给 %d 进行使用。
而这位老哥的答案是这样:
|
|
确实很简洁而且好用。
而返回的是 char
类型,没想到可以直接用……
不过,snprintf()
是定义在 c 语言 <stdio.h>
里面的函数,或许在 c++ 的 <iostream>
也是存在的?
二
还有一种是就是纯 c++ 解答了。使用字符串替换的方法,也是非常震惊强大。
|
|
没想到他连函数形参都改掉了
这个方法首先把模板写好,用.
作为要替换的地方,然后 for
循环遍历字符串。甚至建了两整型变量
让我们现在看看这两个整型变量 is
和 id
:
is = 0
:is
变量循环一次就自增一,对应的是指向res
数组遍历id = 0
:id
是指向输入的整型数组,输出的同时自增,用id++
实现(太简洁了,这个操作!)
循环体内,首先判断指向的这个字符是不是 .
如果是,那么先替换空字符('0'
字符可不是 0
而是空字符),加上 idgits[id]
。但是这时候字符 + 整形就变成字符了,空字符本来不存在,则这个地方就变成了一个数字字符。
这种方法是字符串替换,代码中的 .
可以被随意更换,你想变成 x
也是可以的!