如何在c++的字符串中删除某个字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在c++的字符串中删除某个字符串相关的知识,希望对你有一定的参考价值。

利用C的strstr函数查找字符串,然后strcpy拷贝覆盖它。

#include <cstring>

int main() 
    char s1[] = "This string is used for testing strstr() function";
    char s2[] = "used for";
    char *s3;
    s3 = strstr(s1, s2);
    int p1 = s3-s1; //这只是参考代码,实际本例中,计算p1是无用的。
    strcpy(s1+p1, s3+strlen(s2)); //这里s1+p1,不就是s3的位置?
                                  //但这里还是有问题的,没判断s3是否找到。
                                  //如果s3=NULL,就不应该执行本句了。
    cout << s1 << endl;
   return 0;

//这里只删除了一处匹配的字符串,如果有多处匹配,则循环处理。

参考技术A #include<iostream>
void Delete(char ch[],int n)

int len = strlen(ch);//得到字符串的长度(自带函数在#include<string.h>中)
for(int i=0;i<len;i++)
if(i>=n)
ch[i-1]=ch[i];//把n-1后的前面字符全部替换为为后面的字符
char *str = ch;//用str拷贝ch
str[len-1] = '\0';//把最后一位变为字符串结束标志,因此导致内存泄漏,因为后面还有一个'/0'
ch = new char[len-1];//新开辟一块空间
for(int i;i<=len-1;i++)//把str"/0/0"第二个/0之前的字符全部拷贝到ch中
ch[i] = str[i];
delete []str;//把之前的空间释放

int main()

char ch[]="helloworld";
Delete(ch,5);
std::cout<<ch;//输出hellworld
return 0;
参考技术B 有没有具体的例子,问题太含糊了。 能否打个比方

如何从 C++ 中的字符串中删除前缀或后缀? [复制]

【中文标题】如何从 C++ 中的字符串中删除前缀或后缀? [复制]【英文标题】:How to remove a prefix or a suffix from a string in c++? [duplicate] 【发布时间】:2021-07-18 09:02:35 【问题描述】:

其他人询问过

how to remove an arbitrary substring from a string in c++. how to check whether a string ends with a given prefix how to check whether a string ends with a given suffix

但是,尚未有人询问如何在 c++ 中从字符串中删除前缀或后缀。假设我们知道给定的字符串以特定的前缀/后缀开头,则可以使用一些专门的方法。

那么:鉴于以下情况,我们如何删除前缀和后缀?

  std::string prefix = "prefix.";
  std::string suffix = ".suffix";
  std::string full_string = "prefix.content.suffix";
  std::string just_the_middle = ???;

【问题讨论】:

当您知道如何删除任意子字符串时,您也知道如何删除前缀/后缀,不是吗? 是的,删除任意子字符串的技术确实可以删除前缀/后缀。但是,给定删除前缀/后缀的技术,这些技术不一定适用于删除任意子字符串。我的目的是收集专门用于删除前缀/后缀的技术,这可能涉及比适用于任意子字符串的技术更清晰/更清晰的代码。 抱歉,但它们没有(涉及更清晰/更清晰的代码)。关于“如何消除任意性?”的公认答案专门用于删除后缀(以及问题,只是标题更笼统) 您链接的帖子实际上在删除后缀方面比您在此帖子上的回答做得更好。 【参考方案1】:

由于我们提前知道full_string 以前缀/后缀开头/结尾,因此可以使用std::string::substr

  std::string prefix = "prefix.";
  std::string suffix = ".suffix";
  std::string full_string = "prefix.content.suffix";
  
  // prefix removal
  std::string result1 = full_string.substr(prefix.length());
  
  // suffix removal
  std::string result2 = full_string.substr(0, full_string.length() - suffix.length());

【讨论】:

以上是关于如何在c++的字符串中删除某个字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c++ 中读取不包含在 ascii 中的字符?

c++中怎么删掉字符串中的字符

如何使用 C++ 计算字符串中的某个单词

C++学习笔记:string类型如何删除指定的字符

JS中如何删除某个指定字符(前)后的字符串

如何删除一个字符串中某个字符或汉字——Delphi乐园