根据您提供的代码,我做了一些修改和完善。下面是修正后的代码:
#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助手提供,问题来源于学员提问