题解 | #数字字符串转化成IP地址#
数字字符串转化成IP地址
https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e
C语言代码:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串一维数组
* @return int* returnSize 返回数组行数
*/
#include <stdlib.h>
#include <string.h>
char** restoreIpAddresses(char* s, int* returnSize) {
// write code here
*returnSize = 0;
char **ret_arr = malloc(sizeof(char *) * 1024);
memset(ret_arr, 0, 1024);
int len = strlen(s);
char dest1[4] = {'\0'};
char dest2[4] = {'\0'};
char dest3[4] = {'\0'};
char dest4[4] = {'\0'};
for (int i = 1; i < 4 && i < len - 2; ++i)
{
for (int j = i + 1; j < i + 4 && j < len - 1; ++j)
{
for (int k = j + 1; k < j + 4 && k < len; ++k)
{
if (len - k > 3)
{
continue;
}
memset(dest1, 0, 4); //一定要先清空,否则会残留之前的错误数据
memset(dest2, 0, 4);
memset(dest3, 0, 4);
memset(dest4, 0, 4);
strncpy(dest1, s, i);
strncpy(dest2, s + i, j - i);
strncpy(dest3, s + j, k - j);
strncpy(dest4, s + k, len - k);
if (atoi(dest1) > 255 || atoi(dest2) > 255 || atoi(dest3) > 255
|| atoi(dest4) > 255)
{
continue;
}
if ((strlen(dest1) > 1 && dest1[0] == '0')
|| (strlen(dest2) > 1 && dest2[0] == '0')
|| (strlen(dest3) > 1 && dest3[0] == '0')
|| (strlen(dest4) > 1 && dest4[0] == '0'))
{
continue;
}
char *ret = (char *)malloc(16);
memset(ret, 0, 16);
strncpy(ret, dest1, strlen(dest1));
strncat(ret, ".", 1);
strncat(ret, dest2, strlen(dest2));
strncat(ret, ".", 1);
strncat(ret, dest3, strlen(dest3));
strncat(ret, ".", 1);
strncat(ret, dest4, strlen(dest4));
ret_arr[*returnSize] = ret;
(*returnSize)++;
}
}
}
return ret_arr;
}
