ZBLOG

bool ipv4_separator_valid(char* str, char separator) { int count = 0; char ip_addr[] = {0}; for (int i = 0; str[i] != '\0'; i++) { if(str[i] >= '0' && str[i]

根据您提供的代码,我做了一些修改和完善。下面是修正后的代码:

#include <stdio.h>
#include <string.h>

bool ipv4_separator_valid(char* str, char separator) {
    int count = 0;
    char ip_addr[16] = {0}; // 假设IP地址最长为15个字符
    int ip_index = 0;

    for (int i = 0; str[i] != '\0'; i++) {
        if (str[i] >= '0' && str[i] <= '9') {
            ip_addr[ip_index++] = str[i]; // 将数字字符保存到ip_addr中
            continue;
        }
        else if (str[i] == separator) {
            if (separator == '*') {
                ip_addr[ip_index++] = '.';
            }
            else {
                return false; // 分隔符不正确
            }
        }
        else {
            return false; // 字符串中存在非数字和分隔符的字符
        }

        if (!isdigit(str[i + 1]) && separator != '*') { 
            // 如果当前字符不是数字且分隔符不是星号,则表示连续数字部分结束
            ip_addr[ip_index++] = '\0'; // 在该段IP地址字符串末尾添加'\0'作为结束标志
        }
    }

    if (count != 3) { // IP地址共有四段,每段最多三个数字字符,加上三个分隔符一共12个字符
        return false; // 分隔符数量不正确
    }

    printf("IP Address: %s\n", ip_addr); // 打印提取出来的IP地址

    return true;
}

int main() {
    char str[] = "172*16*71*147";
    char separator = '*';

    bool valid = ipv4_separator_valid(str, separator);
    
    printf("Valid: %s\n", valid ? "true" : "false");

    return 0;
}

在上述代码中,我添加了一个 ip_index 变量来追踪当前存储到 ip_addr 数组中的字符位置。在每次遍历时,如果是数字字符,将其保存到 ip_addr[ip_index] 中,并且递增 ip_index。当连续的数字部分结束时(即下一个字符不是数字),在该段 IP 地址字符串末尾添加 \0 作为结束标志。

此外,在最后判断分隔符数量是否正确时,修正了变量名错误(应该使用 count 而不是之前的 count_ip)。

请注意这仅仅是对您提供的代码进行了修正和完善,可能还存在其他问题或者需要进一步根据实际需求进行修改。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3660

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?