华为机试—删除相同子串

输入两个字符串,找出在第一个字符串中,有多少个第二个子串,输出个数,并输出删除全部第二个子串后的字符串。

输入:abcdcde cd

输出:2 abe

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

int delete_sub_str(const char *str,const char *sub_str,char *result)
{
	const char *p,*q;
	char *t,*tmp;
	int n=0;
	int num=0;//相同子串个数
	p=str;
	q=sub_str;
	t=result;
	n=strlen(q);
	tmp =new char[n+1];
	memset(tmp,0,n+1);
	while (*p)
	{
	    memcpy(tmp,p,n);//从p的初始位置开始拷贝n个字符到tmp
		if (strcmp(tmp,q)==0)//tmp=q
		{
			num++;
			memset(tmp,0,n+1);
			p=p+n;
		}
		else
		{
			*t = *p;
			p++;
			t++;
			memset(tmp,0,n+1);
		}
	}
	delete tmp;
	return num;
}

void main()
{
	char s[100] = {'\0'};
	int num = delete_sub_str("123abc123de1234fg1hi34j123k","123",s);
    cout<<num<<endl;
	cout<<s<<endl;
}
时间: 2024-10-13 22:04:27

华为机试—删除相同子串的相关文章

华为机试—删除连续出现大于等于3的数字

输入一组数字(最多15个),去掉连续次数大于等于三的数字,如果去掉后仍有连续次数大于等于三的,继续进行同样的处理,直到结果中没有出现连续次数大于等于三的数字为止. 如果最终全部消除完了 输出"none" 输入:1 1 1 1 2 2 2 1 3 3 3 3 1 1 1 输出:none #include<iostream> #include<map> #include<vector> using namespace std; int main(int

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

华为机试(B)

输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd #include<iostream> #include<string> #include<iomanip> #include<vector> using namespace std; int main() { string input; getline(cin,input);

华为机试(1)

题目描述   输入一个字符串,删除其中所有的数字,所有大写字母改成小写,其他不变,并输出   输入描述  :一个字符串,保证没有空格,以回车符结束,字符串长度<=20   输出描述  :一个字符串,为题目要求的结果   输入样例  :aAbB13A   输出样例  :aabba  解题思路:模拟题目要求即可,遇到数字就跳过不输出,遇到大写字母就改成小写. #include<string> #include<iostream> using namespace std; void

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

华为机试 --- 求最大三位数

题目:输入10位0-9数字,取其中三位不同数字组合,求组合出来的最大三位数. 如输入 1 2 3 4 5 6 7 8 9 0,组合出来987最大. 测试代码如下: #include <stdio.h> #include <stdlib.h> int IsSame(int *a, int num); int main() { int i=0; int j=0; int a[10]={0}; int input =0; int length =0; int temp=0; for (i

[华为机试真题][2015]65.和尚挑水

题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五; 和尚7: 星期三,六,日; 请将所有合理的挑水时间安排表 思路 回朔法求解 回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解.扩大时,首先检查扩大后是否违反了约束条件,若不违反,则扩大之,然后继续在此基础上按照类似的方法进行,直至成为完整解:若违反,则放弃该步

[华为机试]输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。

//输入数字的汉语拼音,每个拼音的首字母大写.输出该数字的阿拉伯数字. //JiuBaiJiuShiJiu -> 999 #include<stdio.h> #include<string.h> int result = 0; void add(int n,char wei[]) { if(strcmp(wei,"Wan") == 0) result = result + n * 10000; else if(strcmp(wei,"Qian&q