C++ 删除字符串的2种方法小结

C++实现删除给定字符串的给定字符串思路主要有这么几种实现方式:

1.KMP算法

2.用STL的string的 find,然后用erase

3.用C的strstr找到字串位置,然后用strncpy写到新串中

4.用boost库,用正则表达式

测试过的完整代码:

第一种方法:

#include<iostream>
#include <string>
using namespace std;
void deletestr(const char *str, const char* sub_str, char *result);
int main()
{
 char str[100],sub[100];
 cin>>str;
 cin>>sub;
 char result;
 deletestr(str,sub,&result);
 return 0;
}

void deletestr(const char *str, const char* sub_str, char *result)
{
 int sublen = 0;  //获得子串的长度
 const char *t = sub_str;
 while(*t++ != '\0')
 {
 sublen++;
 }

 int pos = 0;
 int pp = 0;
 int repos = 0; // 结果子串的索引
 while(*(str + pos) != '\0')
 {
 char t = *(str + pos);
 if(t == *(sub_str + pp)) // 重复子串起始位置
 {
  *(result + repos) = t;
  repos++;

  if(pp < sublen - 1) // 还未完全重复
  {
  pp++;
  }
  else if(pp == sublen - 1) // 完全重复了
  {
  pp = 0;
  repos -= sublen; // 回溯下标位置
  }
 }
 else{ // 不是一样的字符
  *(result + repos) = t;
  repos++;
 }
 pos++;
 }
 *(result + repos) = '\0';
 cout<<result<<endl;
}

第二种方法,用STL

个人感觉很简单方便

#include<iostream>
#include <string>
using namespace std;

void deletesub(string &str,const string &sub,int n);
int main()
{
 string str,sub;
 cin>>str;
 cin>>sub;
 int n=sub.size();
 deletesub(str,sub,n);
 return 0;
}
void deletesub(string &str,const string &sub,int n)
{
 int m,flag=0,num=0;  //num是子串出现的次数
 while(flag==0)
 {
 m=str.find(sub);
 if(m<0)
  flag=1;
 else
 {
  str.erase(m,n);  //删除子串
  num++;
 }
 }
// cout<<num<<endl;  //子串出现的次数
 cout<<str<<endl;  // 输出删除后的字符串
}

补充知识:C++删除string最后一个字符的几种方法

我就废话不多说了,大家还是直接看代码吧~

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str;
	str = "123456";
	cout << str << endl;

	//方法一:使用substr()
	str = str.substr(0, str.length() - 1);
	cout << str << endl;

	//方法二:使用erase()
	str.erase(str.end() - 1);
	cout << str << endl;

	//方法三:使用pop_back()
	str.pop_back();
	cout << str << endl;
	return 0;
}

结果:

以上这篇C++ 删除字符串的2种方法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现字符串删除字符后逆序输出

    本文实例为大家分享了C++实现字符串删除字符后逆序输出的具体代码,供大家参考,具体内容如下 输入若干个字符串,和一个英文字符ch. 要求删除每个字符串中的字符ch(区分大小写),得到新的字符串,然后将新的字符串按照字典逆序排序后输出 (每个字符串的长度不超过30个字符,字符串总数不超过30) 输入: 3 abcddc sxwcdez ncvccvd c 输出: sxwdez nvvd abdd C++实现:(适用于初学者) #include <iostream> #include <cs

  • C++调用Go方法的字符串传递问题及解决方案

    摘要:C++调用Go方法时,字符串参数的内存管理需要由Go侧进行深度值拷贝. 现象 在一个APP技术项目中,子进程按请求加载Go的ServiceModule,将需要拉起的ServiceModule信息传递给Go的Loader,存在C++调用Go方法,传递字符串的场景. 方案验证时,发现有奇怪的将std::string对象的内容传递给Go方法后,在Go方法协程中取到的值与预期不一致. 经过一段时间的分析和验证,终于理解问题产生的原因并给出解决方案,现分享如下. 背景知识 Go有自己的内存回收GC机

  • C++获取字符串长度的几个函数方式

    C/C++ strlen(str).str.length().str.size().sizeof(str)都可以求字符串长度. 其中str.length().str.size().sizeof(str)是用于求string类对象的成员函数 strlen(str)是用于求字符数组的长度,其参数是char*. 补充知识:获取字符串长度的函数sizeof().strlen().length().size()详解和区别 在C++中计算长度的函数有四种,它们分别是sizeof() ,size(),strl

  • C++ 字符串string和整数int的互相转化操作

    一.string转int的方式 1.采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了. 2.采用标准库中atoi函数. string s = "12"; int a = atoi(s.c_str()); 对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等. 3.采用sstream头文件中定义的字符串流对象来实现转换. istringstream is("12"); //构造输

  • C++ 实现输入含空格的字符串

    1.scanf函数(包含头文件#include <stdio.h>) scanf函数一般格式为scanf("%s",st),但scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以输入带空格,tab或者回车的字符串是不可以的. 解决方法如下: 1. 利用格式符"%[]"它的作用为扫描字符集合. Scanf("%[^c]",str); 其中"c"是一个具体的字符常量(包括控制字符). 当输入字符串时,字符&q

  • C++ 删除字符串的2种方法小结

    C++实现删除给定字符串的给定字符串思路主要有这么几种实现方式: 1.KMP算法 2.用STL的string的 find,然后用erase 3.用C的strstr找到字串位置,然后用strncpy写到新串中 4.用boost库,用正则表达式 测试过的完整代码: 第一种方法: #include<iostream> #include <string> using namespace std; void deletestr(const char *str, const char* sub

  • js中常见切割截取字符串的几种方法小结

    目录 1. split() 方法用于把一个 字符串 分割成 字符串数组 : 2. slice() 可提取字符串的某个部分,并以新的字符串返回被提取的部分: 3.substring() 提取字符串中介于两个指定下标之间的字符 4.join() 把数组中的所有元素转换一个字符串 5. charAt() 返回指定位置的字符 总结 切割截取字符串的几种方法 1. split() 方法用于把一个 字符串 分割成 字符串数组 : stringObject.split(str,length) var str

  • js 删除数组的几种方法小结

    var arr=['a','b','c']; 若要删除其中的'b',有两种方法: 1.delete方法:delete arr[1] 这种方式数组长度不变,此时arr[1]变为undefined了,但是也有好处原来数组的索引也保持不变,此时要遍历数组元素可以才用 for(index in arr) { document.write('arr['+index+']='+arr[index]); } 这种遍历方式跳过其中undefined的元素 * 该方式IE4.o以后都支持了 2.数组对象splic

  • C#中使用split分割字符串的几种方法小结

    第一种方法: 复制代码 代码如下: string s=abcdeabcdeabcde;string[] sArray=s.Split(c) ;foreach(string i in sArray)Console.WriteLine(i.ToString()); 输出下面的结果:abdeabdeabde 第二种方法: 我们看到了结果是以一个指定的字符进行的分割.使用另一种构造方法对多个字符进行分割: 复制代码 代码如下: string s=abcdeabcdeabcdestring[] sArra

  • 分割python多空格字符串的两种方法小结

    目录 分割python多空格字符串 做法 第一种做法 第二种做法 如何分割字符串 1.按空格分割 2.分割+最大分割 3.用#分割 分割python多空格字符串 这篇文章需要处理的问题就是: 一个字符串被多个不同长度的空白分割,我需要把空格去掉,留下有用的信息形成一个列表 如:"aa bbbbb ccc d" ---->['aa', 'bbbbb', 'ccc', 'd'] 做法 1.str.split() 2.filter(None,str.split(" "

  • python3反转字符串的3种方法(小结)

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1(): s=input("请输入需要反转的内容:") return s[::-1] reverse1() #运行结果 In [23]: def reverse1(): ...: s=input("请输入需要反转的内容:") ...: return s[::-1] ...: ...: reverse1(

  • asp.net分割字符串的几种方法小结

    下面一一介绍一下: 1.最简单最常用的方法,以一个指定的字符进行的分割 打开vs.net新建一个控制台项目.然后在Main()方法下输入下面的程序. 复制代码 代码如下: string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 2.使用多个字符进行分割 复制

  • 总结C#删除字符串数组中空字符串的几种方法

    前言 随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.但C#3.0新增的lambda表达式就可以很方便实现这个功能,下面一起看看为大家整理的几种清除数组中的空字符串的方法,有需要的可以参考学习. 方式一:使用lambda表达式筛选过滤掉数组中空字符串 /// <summary> /// 使用lambda表达式排除/过滤/清空/删除掉字符串数组中的空字符串 /// </summary> //

  • Vue 实现列表动态添加和删除的两种方法小结

    下面将介绍两种方式实现动态添加和删除列表 1.不使用组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue 测试实例 - vue实现列表增加和删除</title> <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script&g

  • python对指定字符串逆序的6种方法(小结)

    对于一个给定的字符串,逆序输出,这个任务对于python来说是一种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,今天总结了一下python中对于字符串的逆序输出的几种常用的方法 方法一:直接使用字符串切片功能逆转字符串 #!usr/bin/env python # encoding:utf-8 def strReverse(strDemo): return strDemo[::-1] print(strReverse('pythontab.com')) 结果: moc

随机推荐