华为机试题(6)

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

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. intdelete_sub_str(constchar*str,constchar*sub_str,char*result)
  5. {
  6. char*p=str;
  7. char*q=sub_str;
  8. char*r=result;
  9. intsub_len=strlen(sub_str);
  10. intcmp,cnt=0;
  11. chartmp[50];
  12. while(*p&&(p+sub_len-1!='\0'))
  13. {
  14. if(*p==*q)
  15. {
  16. strncpy(tmp,p,sub_len);
  17. tmp[sub_len]='\0';
  18. cmp=strcmp(tmp,sub_str);
  19. if(cmp==0)
  20. {
  21. cnt++;
  22. p=p+sub_len;
  23. }
  24. }
  25. *result++=*p;
  26. p++;
  27. }
  28. *result='\0';
  29. returncnt;
  30. }
  31. intmain(/*intargc,char**argv*/)
  32. {
  33. intcnt;
  34. constcharstr[50]="hao123hello123world";
  35. constcharsub_str[50]="123";
  36. charresult[50];
  37. cnt=delete_sub_str(str,sub_str,result);
  38. printf("resultis:%s\n",result);
  39. printf("cntis:%d\n",cnt);
  40. getchar();
  41. return0;
  42. }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. voidStrReplace(char*strSrc,char*strFind,char*strReplace)
  5. {
  6. char*p=strSrc;
  7. char*q=strFind;
  8. char*s=strReplace;
  9. charresult[50];
  10. chartmp[50];
  11. char*r=result;
  12. intcmp;
  13. intlen=strlen(strFind);
  14. //intlen2=strlen(strSrc);
  15. while(*p)
  16. {
  17. if(*p==*q)
  18. {
  19. strncpy(tmp,p,len);
  20. tmp[len]='\0';
  21. cmp=strcmp(tmp,strFind);
  22. if(cmp==0)
  23. {
  24. while(*s)
  25. *r++=*s++;
  26. p=p+len;
  27. if(*p=='\0')
  28. break;
  29. continue;
  30. }
  31. }
  32. *r++=*p;
  33. p++;
  34. }
  35. *r='\0';
  36. strcpy(strSrc,result);
  37. }
  38. intmain(/*intargc,char**argv*/)
  39. {
  40. charstrSrc[50]="abcdhelloabefg";
  41. charstrFind[50]="hello";
  42. charstrReplace[50]="world";
  43. printf("resultis:%s\n",strSrc);
  44. StrReplace(strSrc,strFind,strReplace);
  45. printf("resultis:%s\n",strSrc);
  46. //printf("cntis:%d\n",cnt);
  47. getchar();
  48. return0;
  49. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值