华为机试题(6)

1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。

#include 
#include 
#include 

int delete_sub_str(const char *str,const char *sub_str,char *result)
{
	char *p=str;
	char *q=sub_str;
	char *r = result;
	int sub_len = strlen(sub_str);
	int cmp,cnt = 0;
	char tmp[50];
	while(*p && (p+sub_len-1 != '\0'))
	{
		if(*p == *q)
		{
			strncpy(tmp,p,sub_len);
			tmp[sub_len] = '\0';
			cmp=strcmp(tmp,sub_str);
			if(cmp == 0)
			{
				cnt++;
				p=p+sub_len;
			}
			
		}
		*result++ = *p;
		p++;
	}
	*result = '\0';
	return cnt;

}
int main(/*int argc, char **argv*/)
{
	int cnt;
	const char str[50]="hao123hello123world";
	const char sub_str[50]="123";
	char result[50];
	cnt = delete_sub_str(str,sub_str,result);

	printf("result is :%s\n ",result);
	printf("cnt is :%d\n ",cnt);
	getchar();
	return 0;
}

2 使用C语言实现字符串中子字符串的替换

描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。

举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:

ABCDEFGHIJKLMNOPQgggUVWXYZ

#include 
#include 
#include 

void StrReplace(char* strSrc, char* strFind, char* strReplace)
{
	char *p=strSrc;
	char *q=strFind;
	char *s=strReplace;
	char result[50];
	char tmp[50];
	char *r=result;
	int cmp;
	int len = strlen(strFind);
	//int len2=strlen(strSrc);
	while(*p )
	{
		if(*p == *q)
		{
			strncpy(tmp,p,len);
			tmp[len]='\0';
			cmp = strcmp(tmp,strFind);
			if(cmp == 0)
			{
				while(*s)
					*r++ = *s++;
				p=p+len;
				if(*p=='\0')
					break;
				continue;
			}
		}
		*r++ = *p;
		p++;
	}
	*r = '\0';
	strcpy(strSrc,result);
}
int main(/*int argc, char **argv*/)
{
	
	char strSrc[50]="abcdhelloabefg";
	char strFind[50]="hello";
	char strReplace[50]="world";
	printf("result is :%s\n ",strSrc);
	StrReplace(strSrc,strFind,strReplace);
	printf("result is :%s\n ",strSrc);
	//printf("cnt is :%d\n ",cnt);
	getchar();
	return 0;
}


 


 

你可能感兴趣的:(C++)