这里写自定义目录标题
1108 字符串操作问题
给你一个有效的 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 地址
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/defanging-an-ip-address
。
解决代码块:
class Solution {
public:
string defangIPaddr(string address) {
string temp;
int len_add = address.length();
int i = 0;
for(i = 0;i<len_add;i++)
{
if(address[i] == '.')
{
temp += "[.]";
}
else{
temp += address[i];
}
}
return temp;
}
};
遇到的问题
之前的代码是把两个字符串全都当成数组,大体如下:
string defangIPaddr(string address) {
string temp;
int len_add = address.length();
cout<<address<<endl;
cout<<"len="<<len_add<<endl;
int i = 0;
int j = 0;
for(i = 0;i<len_add;i++)
{
cout<<address[i]<<endl;
if(address[i] == '.')
{
temp[j] ='[';
j++;
temp[j] = '.';
j++;
temp[j] = ']';
j++;
}
else{
temp[j] = address[i];
}
}
return temp;
}
遇到什么问题呢,就是当j自增到一定的值以后,程序便无法继续运行了,遇到了内存方面的错误,猜测是一开始定义temp字符串的时候,它的长度是不定的,随着j的自增,超出了temp字符串的长度,再靠下标j取值的话,就会出现错误。于是改成了一开始的代码,用字符串相加来做。
当然,如果想初始化时指定字符串的长度,可以这样玩:
string a(字符串内容,字符串长度);
比如string a("asdf",5);
这样的话输出字符串的长度就是5,而不是一开始的4.