题解 | #数字字符串转化成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; }