目录
一、查找字符/字符串
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;
}

这篇博客介绍了如何在C++中实现字符串的查找与删除功能。查找字符或字符串时,分别给出了从整个字符串中查找单个字符及其下标,以及查找子字符串并返回其起始下标的算法。删除部分讲解了如何根据给定位置删除指定长度的字符,并演示了实际的代码测试案例。
—— 查找字符字符串 + 删除字符字符串&spm=1001.2101.3001.5002&articleId=123991535&d=1&t=3&u=b83834506f0141f2ba939ae2899a1536)

被折叠的 条评论
为什么被折叠?



