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

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务