C++ 字符串编程训练1

最近又到了找工作的时间,所以想每天抽点时间出来对编程进行相关训练。C++字符串是一个很重要的知识点,采用STL、算法等C++优于C的方面,能够使问题解决起来更加轻松。以下程序都是自己写的,可能有些地方时间效率、空间效率不高,所以希望大家能够多多讨论交流,互相提升。

题目:删除子串

说明:给定两个形参str和substr,其中str为源字符串,substr为需要删除的子串,如果str中包含substr,则将其删除并输出新的字符串,否则输出源字符串。

void delete_substr(string &str,const string &substr)
{
     int m=0;    //用于作为是否找到substr的标识
     int flag=0;  //退出循环的标志,这是因为可能在str中存在多个substr
     while(flag==0)
     {
        m=str.find(substr);   //find函数的使用
        if(m<0)
        {
          flag=1;     //用于退出循环
          cout<<str;
        }
        else
       {
         str.erase(m,substr.size());   //目标是substr出现的地址,substr.size()表示从该地址开始需要删除的内容长度
       }
    }
}

int main()
{
   string str,substr;
   getline(cin,str);
   getline(cin,substr);
   delete_substr(str,substr);
}

如果存在相关问题,希望大家可以指点一二,谢谢!

时间: 2024-10-03 19:46:35

C++ 字符串编程训练1的相关文章

C++ 字符串编程训练2

今天讲的一道习题是很经典的约瑟夫环问题,其实lz对于链表的某些操作还不是太懂,所以在程序中有些地方还不太看得懂,这里借鉴的网上的做法,还请大牛能够解答我的疑惑,谢谢! 标题:约瑟夫环 说明:约瑟夫环是这么一个问题:已知n个人(编号1,2,...n)围坐在圆桌周围.从编号为k的人开始报数,数到m的人出列,他的下一个人又从1开始报数,数到m的人出列,直到所有人都出列. struct node{ int num; node *next; }; node *creat(int n)//构建一个链表,即h

C++ 字符串编程训练5

手机号码合法性: 1)长度13位 2)以86的国家码打头 3)手机号码的每一位都是数字 标题:判断手机号码是否合法,输出对应值 说明:函数要求包括: 1)合法则返回0: 2)长度不合法则返回1: 3)包含非数字字符则返回2: 4)不以86开头则返回3. int legal_phone(const string &str){    if(str.size()!=13)//长度的判断    {      return 1;    }    if(str[0]!='8'&&str[1]!

C++ 字符串编程训练3

标题:比较一个数组是否为回文数组 说明:回文数组即从头到尾和从尾到头都是一样的,例如数组{1,2,3,4,5,4,3,2,1}或者数组{1,2,3,4,4,3,2,1}都是回文数组. bool is_huiwen(int A[],int n){    for(int i=0;i<n/2;i++)//n/2是关键,因为不需要再从尾到头比较    {      if(A[i]!=A[n-i-1])//不满足回文要求      {        return false;      }    }   

C++ 字符串编程训练4

这次的题目是一道比较题,将两个数组从后开始对比,如果对比的两个数不一样,则进行计数加1.当其中一个数组已经遍历完了之后,输出计数值,如果该值为0,表示两个数组相同. 标题:输出两个数组不相等的元素个数 说明:定义一个函数int array_compare(int len1,int array1[],int len2,int array2[]),其中len1为array1数组的长度,len2为array2数组的长度.函数返回一个int值的不等个数. int unequal_num(int A[],

(编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(非递归)

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. 可以和(编程训练)再回首,数据结构--二叉树的前序.中序.后序遍历(递归)对比着看 [问题描述] 根据顺序存储结构建立二叉树的二叉链表,并对二叉树进行先序.中序.后序遍历. [基本要求] ·功能:根据顺序存储结构建立二叉树的二叉链表,并进行先序.中序.后序遍历. ·输入:输入二叉树的顺序存储. ·输出:二叉树的先序.中序.后序遍历序

VC 中 字符串编程

/* #ifdef WIDECHAR//#ifdef  /#ifndef 具有在本文件内向上溯源性  在上面的可以识别  在下面的不能识别 #endif wchar_t *pszText=L"HelloT_char"; wprintf(L"%s\n",pszText); #else char *pszText="HelloT_char"; printf("单%s\n",pszText); #endif */ 对于wchar_t

Qt 编程训练之七

Qt进程间通信 TCP / IP 跨平台的 QtNetwork模块提供的类网络编程便携式和容易. 它提供了高层类(例如,QNetworkAccessManager, QFtp)使用特定的应用层协议通信,低层类(例如, qtcpsocket, QTcpServer, QSslSocket为实现协议). 共享内存 跨平台共享内存类, QSharedMemory提供了访问操作系统的共享内存实现. 它允许安全由多个线程访问共享内存段和过程. 此外,QSystemSemaphore可用于控制对资源的访问共

(编程训练)再回首,数据结构——(升级版)使用栈判断括号匹配

点击打开 基础版 最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. /* ********************************************************** * 3-2 * 设在一个算术表达式中允许使用3种括号:圆括号"(".")",方 * 括号"["."]",花括号"

【编程训练-考研上机模拟】综合模拟2-2019浙大上机模拟(晴神)

A - next[i] Problem Description 在字符串匹配的KMP算法中有一个重要的概念是next数组,求解它的过程让不少同学伤透了心.next数组的直接语义其实是:使"长度为L的前缀"与"长度为L的后缀"相同的最大L,且满足条件的前后缀不能是原字符串本身. 例如对字符串"ababa"来说,长度为1的前缀与后缀都是"a",它们相同:长度为2的前缀与后缀分别是"ab"和"ba&qu