目录
一、查找字符/字符串
1、输入字符,返回字符的位置
遍历字符串的每一个字符,如果找到了就返回下标,如果没找到就返回 -1
这个比较简单,就不进行代码测试了
int find(const char ch)
{
for (size_t i = 0; i < _size; i++)
{
if (_str[i] == ch)
{
return i;
}
}
return -1;
}
2、输入字符串,返回字符串第一个字符的下标
最暴力的解法就是,设置一个区间块,这个区间块的长度是要寻找的字符串的长度
每遍历完一次区间块,区间块向后移动一个位置
int find(const char* s)
{
int len = strlen(s);
bool flag = false;
for (size_t i = 0; i <= _size - len; i++) //注意这里的结束位置是 _size-len
{
for (size_t j = i; j < i+len; j++)
{
if (_str[j] == s[j - i])
{
flag = true; //如果匹配一致,flag为真
}
else
{
flag = false; //一旦匹配不一致,这个区间块就不继续匹配了,区间块向后移动
break;
}
}
if (flag)
return i; //如果区间块遍历下来,依然保持true,那就说明找到了
else
continue; //否则就搜索下一个区间块
}
return -1;
}
代码测试:
int main() {
MyString s4("abcd");
cout << "找到的下标位置为:"<<s4.find("bc") << endl;
return 0;
}
二、删除指定位置的字符/字符串
如下图所示,把蓝色部分放到红色部分的位置
这里 \0 也会被一起拷贝
void erase(int pos , int len)
{
if (pos < 0)
return;
if (pos+len >= _size)
{
_str[pos] = '\0';
_size = pos;
}
else
{
strcpy(_str + pos, _str + pos + len); //_str + pos + len 开始会一直向后拷贝,直到没有字符
_size -= len;
}
}
代码测试:
int main() {
MyString s4("abcd");
s4.erase(1, 2); //第一个参数是下标,第二个参数是删除的字符个数
return 0;
}