c语言练习题55:IP 地址⽆效化
IP 地址⽆效化
题⽬描述: 给你⼀个有效的 IPv4 地址 address ,返回这个 IP 地址的⽆效化版本。 所谓⽆效化 IP 地址,其实就是⽤ "[.]" 代替了每个 "."。
• ⽰例 1: 输⼊:address = "1.1.1.1" 输出:"1[.]1[.]1[.]1"
• ⽰例 2: 输⼊:address = "255.100.50.0" 输出:"255[.]100[.]50[.]0"
• 提⽰: 给出的 address 是⼀个有效的 IPv4 地址
算法思路:
1. 定义⼀个空字符串 ans ,并将其初始化为空;
2. 遍历原字符串,当遇到‘.’时,将'[','.',']'依次添加进新字符串;
3. 否则将遍历到的字符直接添加进字符串 ans 。 • 这⾥需要定义另外的指针指向新字符串第⼀位作为返回值,并且要在新字符串最后⼀位添 加'',否则可能会导致以下问题:
1. 访问越界:如果程序试图读取没有以空字符结尾的字符串的内容,它可能会读取字符串后⾯的内 存区域,这可能会导致程序访问超出其允许范围的内存,从⽽导致崩溃或其他错误。
2. 错误输出:如果程序试图将没有以空字符结尾的字符串输出到标准输出(如屏幕或⽂件),它可 能会输出字符串后⾯的内存区域,这可能会导致输出错误的结果。
//IP 地址⽆效化
char* defangIPaddr(char* address) {
int len = strlen(address);
char* ptr = NULL;
//定义指针指向字符串⾸位,并且为新字符串分配内存
char* ans = ptr = malloc(len + 6 + 1);
//利⽤指针遍历字符串,当前字符不为''时进⼊循环
while (*address)
{
//判断当前字符是否为'.',是则将"[.]"添加进新字符串
if (*address = '.') {
*ptr++ = '[';
*ptr++ = '.';
*ptr++ = ']';
}
else {
*ptr++ = *address;
}
//将指针指向字符串下⼀位字符
address++;
}
//将字符串最后⼀位赋值为'',防⽌访问越界或错误输出
*ptr = '';
//返回指向字符串⾸位的指针
return ans;
}